154.寻找旋转排序数组中的最小值II
154.寻找旋转排序数组中的最小值II
题解
这一题与上一题比较就多了一个条件,元素重复,那么元素重复,可能会出现下面两种情况
2222122
2212222
这么这个时候nums[mid]==nums[right],无法判断最小值在左区间还是右区间,这个时候,直接right–,因为既然nums[mid]==nums[right],就说明最后一位元素没用了,所以直接去掉即可
代码
package main func findMin(nums []int) int { left, right := 0, len(nums)-1 for left+1 < right { mid := left + (right-left)/2 if nums[mid] > nums[right] { left = mid } else if nums[mid] < nums[right] { right = mid } else { right-- } } if nums[left] < nums[right] { return nums[left] } return nums[right] }