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++代码
|
|