题目
解题思路
和153题的区别在于可能存在重复的元素
当nums[pivot]==nums[high]。由于重复元素的存在,并不能确定 nums[pivot] 究竟在最小值的左侧还是右侧,因此不能莽撞地忽略某一部分的元素。唯一可以知道的是,由于它们的值相同,所以无论 nums[high] 是不是最小值,都有一个它的「替代品」nums[pivot],因此可以忽略二分查找区间的右端点。
代码
class Solution {
public int findMin(int[] nums) {
int low = 0;
int high = nums.length - 1;
while (low < high) {
int pivot = low + (high - low) / 2;
if (nums[pivot] < nums[high]) {
high = pivot;
} else if (nums[pivot] > nums[high]) {
low = pivot + 1;
} else {
high -= 1;
}
}
return nums[low];
}
}