寻找旋转数组中的最小值——二分

46 阅读1分钟

image.png

image.png

代码 二分:

  1. 中间值如果比 nums[high] 大,则最小值,一定在中值与 high 之间,且最小值不可能是现在的中值,所以 low = mid + 1
  2. 如果小,则一定在 low 与中值之间,且最小值可能是现在的中值,所以 high = mid
  3. 如果相等,说明现在的区间长度为 1 ,也就是说这个 for 循环已经出去了,所以不可能相等
func findMin(nums []int) int {
    low, high := 0, len(nums) - 1
    for low < high {
        pivot := low + (high - low) / 2
        if nums[pivot] < nums[high] {
            high = pivot
        } else {
            low = pivot + 1
        }
    }
    return nums[low]
}