要求:有重复元素旋转数组找最小值
思路:区别为重复,找第一个
class Solution {
public:
int findMin(vector<int>& nums) {
int n=nums.size();
int left=0,right=n-1;
while(left<=right){
int mid=left+((right-left)>>1);
//有重复数的左边界
//小于大于都能舍弃一边但是相等时并不能确定,但是可以把right处舍弃
//[3,1,3]
if(nums[mid]>nums[right])left=mid+1;
//本位置可能为不能排除
else if(nums[mid]<nums[right])right=mid;
//left==right时right减了
else --right;
}
return nums[left];
}
};