【LeetCode通关全记录】704. 二分查找

【LeetCode通关全记录】704. 二分查找

题目地址:704. 二分查找

解法:二分查找

二分查找的代码大家应该都背的滚瓜烂熟了吧,这里就着重讲一下二分查找的一些小技巧:

  1. 在使用mid = (left + right) / 2可能发生溢出的情况下,可以套用mid = left + (right - left) / 2的公式避免溢出;
  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),只使用了常数个数的存储空间。

你可能感兴趣的:(【LeetCode通关全记录】704. 二分查找)