【LeetCode通关全记录】35. 搜索插入位置
题目地址:35. 搜索插入位置
解法:二分查找
本题其实也是二分查找的变体。本题与二分查找的不同之处在于找不到待查元素时需要返回插入位置,所以查不到时需要返回l
——因为l
左边的值一直小于等于target
,而r
右边的值一直大于等于target
,这样退出循环时,因为l
左边的值全部小于等于target
所以l
就是我们要求的插入位置。
另外这里用了一个小知识点:右移一位相当于除以2,并且比除法运算更快。
func searchInsert(nums []int, target int) int {
l, r := 0, len(nums)-1
mid := 0
for l <= r {
mid = l + ((r-l)>>1)
if nums[mid] == target {
return mid
} else if nums[mid] < target {
l = mid + 1
} else {
r = mid - 1
}
}
return l
}
执行用时: 4 ms(超过76.64%的Golang提交记录)
内存消耗: 3 MB(超过14.07%的Golang提交记录)
时间复杂度:O(logn),二分查找的时间复杂度为O(logn);
空间复杂度:O(1),只使用了常数个数的存储空间。