Leetcode 704 二分查找

43 阅读1分钟

704. 二分查找

image.png

重点

  1. 数组为升序有序数组

思路

  1. 一般对于有序数组,都应该和二分查找联系在一起,该题为在有序数组中查找目标值;
  2. 对于二分查找最重要的是注意循环不变量,我们分别用left, right代表最前面的元素与最后面的元素,当数据范围为[left, right]时,那我们便利时为了不漏数据,就需要使用while left <= right, 而当我们使用[left, right)范围时,我们就需要使用while left < right;以下是分别两种解法

解法一 使用[left, right)作为数据范围时

func search(nums []int, target int) int {
    left, right := 0, len(nums)
    for left < right{
        mid := (left + right) / 2
        if nums[mid] == target{
            return mid
        } else if nums[mid] > target{
            right = mid // 因为right数据永远取不到,所以使用right=mid
        }else{
            left = mid + 1
        }
    }
    return -1
}

解法二 使用[left, right]作为数据范围时

func search(nums []int, target int) int {
    left, right := 0, len(nums) - 1 // 注意这里是需要有意义的元素 
    for left <= right{
        mid := (left + right) / 2
        if nums[mid] == target{
            return mid
        } else if nums[mid] > target{
            right = mid - 1 // 因为right可以取到,我们使用right = mid - 1
        }else{
            left = mid + 1
        }
    }
    return -1
}