1 二分+缩小右区间去重
- 情况1——
nums[mid]
在最小值右边或就是最小值
- 情况2——
nums[mid]
在最小值左边
对于重复数组,又多了情况三
- 情况3——
nums[mid]
和nums[right]
相等重复
class Solution {
public:
int findMin(vector<int>& nums) {
int size = nums.size();
int left = 0, right = size - 1;
while (left < right) {
int mid = left + ((right - left) >> 1);
if (nums[mid] > nums[right])
left = mid + 1;
else if (nums[mid] < nums[right])
right = mid;
else if (nums[mid] == nums[right]) // 对于重复元素,缩小右区间; 暴力+二分思想
right--;
}
return nums[left];
}
};