当前位置: 首页 > news >正文

Leetcode 搜索插入位置

在这里插入图片描述
这段代码的核心思想是 二分查找,用于在一个已经排序的数组中查找目标值的位置。如果目标值存在于数组中,返回它的索引;如果目标值不存在,返回它按顺序应该插入的位置。

算法思想步骤:

  1. 定义左右边界

    • 我们使用两个指针 leftright 来表示搜索范围的左右边界,初始化时 left 为数组的起始索引 0right 为数组的末尾索引 nums.length - 1
  2. 二分查找循环

    • left <= right 的前提下,进入循环。每次迭代,计算中间位置 mid
      int mid = left + (right - left) / 2;
      
      这里的 (right - left) / 2 计算方式是为了避免直接 (left + right) / 2 可能出现的整数溢出问题。
  3. 比较中间值

    • 如果 nums[mid] 正好等于目标值 target,则直接返回 mid 作为目标值的索引。
    • 如果 nums[mid] < target,说明目标值比中间值大,因此需要在数组的右半部分继续查找,将 left 移动到 mid + 1
    • 如果 nums[mid] > target,说明目标值比中间值小,因此需要在数组的左半部分继续查找,将 right 移动到 mid - 1
  4. 最终插入位置

    • 当循环结束后,如果仍然没有找到目标值,left 就是目标值应该插入的位置。因为 left 指向的正是第一个大于目标值的位置,这也是题目要求的顺序插入位置。

时间复杂度:

  • 该算法的时间复杂度为 O(log n),这是因为每次迭代都会将搜索范围缩小一半。

代码解释:

class Solution {public int searchInsert(int[] nums, int target) {int left = 0, right = nums.length - 1;  // 初始化左右指针while (left <= right) {  // 当左指针小于或等于右指针时进行循环int mid = left + (right - left) / 2;  // 计算中间位置if (nums[mid] == target) {  // 如果找到目标值,返回其索引return mid;} else if (nums[mid] < target) {  // 如果中间值小于目标值,查找右半部分left = mid + 1;} else {  // 如果中间值大于目标值,查找左半部分right = mid - 1;}}return left;  // 如果未找到目标值,返回应该插入的位置}
}

这个算法高效且适用于有序数组的搜索和插入位置查找问题。

http://www.lryc.cn/news/458188.html

相关文章:

  • jsp怎么实现点赞功能
  • 取消microsoft edge作为默认浏览器 ,修改方法,默认修改不了的原因
  • C++面试速通宝典——17
  • 10、论文阅读:基于双阶对比损失解纠缠表示的无监督水下图像增强
  • Git配置token免密登录
  • 活动预告|博睿数据将受邀出席GOPS全球运维大会上海站!
  • Flutter技术学习
  • Kubernetes网络通讯模式深度解析
  • SBTI科学碳目标是什么?有什么重要意义
  • 英特尔新旗舰 CPU 将运行更凉爽、更高效,适合 PC 游戏
  • MySQL 启动失败 (code=exited, status=1/FAILURE) 异常解决方案
  • 通信工程学习:什么是RIP路由信息协议
  • SQL调优指南与高级技巧:打造高效数据库查询
  • 实惠又好用的云手机推荐【高性价比云手机盘点】
  • Pear Admin Flask Master开启步骤
  • 知识图谱入门——8: KG开发常见数据格式:OWL、RDF、XML、GraphML、JSON、CSV。
  • 离线使用k8s部署项目
  • 【CF2021E】Digital Village(All Version)
  • [C++]使用纯opencv部署yolov11目标检测onnx模型
  • 【Golang】Go 语言中的 time 包详解:全面掌握时间处理与应用
  • MySQL联合索引、索引下推Demo
  • linux上复制命令cp的常见用法-ubuntu
  • R语言绘制气泡图
  • c++ sparsetable 模版
  • 创建线程池和封装锁
  • 易图讯军用VR三维电子沙盘系统
  • LeetCode讲解篇之70. 爬楼梯
  • 论文写作不再难,论文初稿快速成型法!
  • linux系统,监控进程运行状态并自动重启崩溃后的进程的多种方法
  • 【JavaEE初阶】深入理解不同锁的意义,synchronized的加锁过程理解以及CAS的原子性实现(面试经典题);