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

23 阅读1分钟

image.png

代码:

与昨天唯一不同的是,存在重复元素,所以二分的时候我们要考虑 mid 值与 high 相等的情况,如果相等,那么我们将无法判断 mid 是在最小值的左还是右,但有一点可以肯定,那就是,现在的 high 一定不是最小值,即使是,我们依然有 mid 所以无需担心数据丢失,high-- 即可

func findMin(nums []int) int {
    low, high := 0, len(nums) - 1
    for low <= high {
        mid := low + (high - low) / 2
        if nums[mid] < nums[high] {
            high = mid
        }else if nums[mid] > nums[high] {
            low = mid + 1
        }else {
            high--
        }
    }
    return nums[low]
}