[优选算法专题三.二分查找——NO.20搜索插入位置 ]

题目链接:

35. 搜索插入位置

题目描述:

题目解答:


  • 算法思路:代码采用了二分查找算法,通过不断缩小查找范围,来确定目标值在数组中的位置或应插入的位置。二分查找的前提是数组是有序的,这样每次可以将查找范围缩小一半,时间复杂度为 O (log n),其中 n 是数组的长度。
  • 代码详解 :
    • 初始化指针 :int left = 0, right = nums.size() - 1;定义了左右指针,初始时,left指向数组的第一个元素,right指向数组的最后一个元素。
    • 二分查找循环 :while (left < right)是二分查找的循环条件,当left小于right时,说明查找范围仍然存在,继续循环。
    • 计算中间位置 :int mid = left + (right - left) / 2;计算中间位置mid,这种计算方式可以避免left和right较大时,left + right可能产生的整数溢出问题。
    • 更新指针 :如果nums[mid] < target,说明目标值在mid的右侧,将left更新为mid + 1;否则,说明目标值在mid的左侧或就是mid,将right更新为mid。
    • 确定插入位置 :循环结束后,left和right相等,此时判断nums[left] < target是否成立,如果成立,说明目标值大于数组中的所有元素,应插入到right + 1的位置;否则,目标值应该插入到right的位置。
  • 示例 4:假设输入数组nums = [1, 3, 5, 6],target = 2。
    • 初始时,left = 0,right = 3,mid = 1,nums[1] = 3 > 2,则right = 1。
    • 第二次循环,left = 0,right = 1,mid = 0,nums[0] = 1 < 2,则left = 1。
    • 循环结束,left = right = 1,nums[1] = 3 > 2,返回right,即 1,也就是目标值 2 应该插入到数组的索引 1 处。
相关推荐
碧海银沙音频科技研究院11 小时前
基于炬芯ATS3089X自研AEC声学回声消除算法
算法
通问AI11 小时前
在两台 Mac Studio 上跑 800B 模型:MLX + RDMA over Thunderbolt 实测与四道门选型法
算法
ZywOo62311 小时前
《算法竞赛进阶指南》0x03 前缀和与差分
算法
Scintilla_y11 小时前
DAY2 滑动窗口
算法·leetcode·散列表
lvwangshu11 小时前
笛卡尔树
算法·图论
026d2311 小时前
状态信号只知“其然”不知“其所以然”:变工况机械故障诊断的物理盲区
算法
姜鱼问生12 小时前
备份和服务器在同一台机器上,等于没备份
算法·架构
姜鱼问生12 小时前
别再 chmod 777 了,用 ACL 给它开一扇窗
后端·算法·架构
特立独行的猫a12 小时前
仓颉语言UI开发实战:我用仓颉写了个桌面版力扣
算法·leetcode·ui·tauri·仓颉·cj-tarui
y1su12 小时前
Leetcode 动态规划 模板
java·数据结构·算法·leetcode·动态规划