35. 搜索插入位置
分析
- 定义搜索范围:
- 使用两个指针
l
和r
分别表示数组的左边界和右边界,初始值为0
和nums.size()
- 注意右边界初始值为
nums.size()
,因为我们需要处理目标值可能插入在数组末尾的情况
- 使用两个指针
- 进行二分查找:
- 计算中间位置
mid = (l + r) >> 1
- 如果
target <= nums[mid]
:target
可能在mid
位置或其左侧,更新右边界r = mid
- 如果
target > nums[mid]
:target
一定在mid
右侧,更新左边界l = mid + 1
- 计算中间位置
- 返回结果:
- 最终,
l
和r
会收敛到目标值的位置 - 如果
target
不在数组中,返回的是它应该插入的位置
- 最终,
时间复杂度
二分查找的时间复杂度为 O(log n)
,其中 n
是数组长度
空间复杂度
空间复杂度为 O(1)
C++代码
|
|