给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
输入: [1,3,5,6], 5输出: 2
示例 2:
输入: [1,3,5,6], 2输出: 1
示例 3:
输入: [1,3,5,6], 7输出: 4
示例 4:
输入: [1,3,5,6], 0输出: 0
解法一:二分查找
这个问题可以转化为一个经典的 求大于等于定值的第一个位置
需要注意的是:
- 这里不需要对于最后结果的越界处理,因为如果越界表示我们需要把
target插入到最后。 ```go // 转变为求第一个大于等于的 key func searchInsert(nums []int, target int) int { n := len(nums) lo, hi := 0, n-1 for lo <= hi {
} return lo }mid := lo + (hi-lo)>>1if nums[mid] >= target {hi = mid - 1} else {lo = mid + 1}
另一种二分形式:同样不需要检测越界,所以最后的还是直接返回 lo 即可。```gofunc searchInsert(nums []int, target int) int {n := len(nums)lo, hi := 0, n-1for lo <= hi {mid := lo + (hi-lo)>>1if nums[mid] >= target {if mid == 0 || nums[mid-1] < target {return mid}hi = mid - 1} else {lo = mid + 1}}return lo}
