【LeetCode通关全记录】704. 二分查找
2021-10-20 本文已影响0人
NoelleMu
【LeetCode通关全记录】704. 二分查找
题目地址:704. 二分查找
解法:二分查找
二分查找的代码大家应该都背的滚瓜烂熟了吧,这里就着重讲一下二分查找的一些小技巧:
- 在使用
mid = (left + right) / 2
可能发生溢出的情况下,可以套用mid = left + (right - left) / 2
的公式避免溢出; - 除以2这个操作可以用右移1位来代替,会更快一些:
mid = left + (right - left) >> 1
func search(nums []int, target int) int {
l, r := 0, len(nums)-1
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 -1
}
执行用时: 32 ms(超过80.69%的Golang提交记录)
内存消耗: 6.7 MB(超过25.59%的Golang提交记录)
时间复杂度:O(logn),二分查找的时间复杂度为O(logn);
空间复杂度:O(1),只使用了常数个数的存储空间。