代码:
与昨天唯一不同的是,存在重复元素,所以二分的时候我们要考虑 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]
}