35. 搜索插入位置
题目描述:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
难度:简单
示例 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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-insert-position
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
这道题的解法很简单,直接二分搜索就可以了。不过需要注意一点的是,在没有相等的数时找出应该被插入的位置,这个信息可以被等价转换为在没有相等的数时,找出刚好比被搜索值大的数。由于二分搜索中,lo 的值是在不断的递进的,而 hi 的值则再不断递减,当最终没有目标值时,lo 的值会停留在高于目标值的位置。
func searchInsert2(nums []int, target int) int {
l := len(nums)
lo := 0;hi := l - 1
middle := (lo + hi) / 2
for lo <= hi{
if nums[middle] < target{
lo = middle + 1
middle = (lo + hi) / 2
} else if nums[middle] > target{
hi = middle - 1
middle = (lo + hi) / 2
}else{
return middle
}
}
return lo
}