搜索插入位置
搜索插入位置
Beyond搜索插入位置
问题描述
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为O(log n)
的算法。
示例 1:
1 | 输入: nums = [1,3,5,6], target = 5 |
示例 2:
1 | 输入: nums = [1,3,5,6], target = 2 |
示例 3:
1 | 输入: nums = [1,3,5,6], target = 7 |
提示:
1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums
为 无重复元素 的 升序 排列数组-104 <= target <= 104
思路
我们可以使用二分查找的思想来找到 target
应该插入的位置,而不需要修改原始数组。
代码实现
1 | class Solution { |
解释
- 初始化:设置两个指针
left
和right
,分别指向数组的开始和结束。 - 二分查找:在每次迭代中,计算中间索引mid,并比较nums[mid]和target。
- 如果
nums[mid] == target
,则返回mid
。 - 如果
nums[mid] < target
,则target
在mid
的右侧,因此将left
更新为mid + 1
。 - 如果
nums[mid] > target
,则target
在mid
的左侧,因此将right
更新为mid - 1
。
- 如果
- 返回结果:当
left
大于right
时,循环结束。此时,left
指向的是第一个大于target
的数的位置(如果target
比所有数都大,则left
指向nums.size()
)。这正是target
应该插入的位置。
这种实现方式既高效又符合题目要求,不修改原始数组。
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果