搜索插入位置
LeetCode 35:用二分查找返回目标下标或有序插入位置。
题目:35. 搜索插入位置
在无重复元素的升序数组中查找 target。找到时返回下标;未找到时返回按升序插入的位置。这里只计算位置,不修改数组。
1. 查找过程
nums = [1, 3, 5, 6],target = 2。以下为区间示意,L、M、R 分别表示左边界、中点、右边界。
第 1 轮
| |
middle = 1,nums[1] = 3 > 2,排除下标 1~3,更新 right = middle - 1,即 right = 0。
第 2 轮:只检查下标 0
| |
middle = 0,nums[0] = 1 < 2,更新 left = middle + 1,即 left = 1。此时
left = 1 > right = 0,候选区间为空,结束查找。
关键提示:在当前左闭右闭写法中,left 左侧的元素都小于 target,right
右侧的元素都大于 target。未找到目标值时,left = right + 1,两侧边界刚好交错,left 正是插入位置;这里也可以写成 return right + 1。
2. Python 实现
| |
3. 复杂度
- 时间复杂度:最坏为
O(log n),每轮候选区间缩小约一半。 - 额外空间复杂度:
O(1),只维护固定数量的下标变量。
评论
使用 GitHub 登录后参与讨论,评论将公开保存在 GitHub。
站长管理删除会同步到 GitHub,无法撤销。
阅读到这里时加载评论。