Follow up for "Find Minimum in Rotated Sorted Array":
What if duplicates are allowed?
Would this affect the run-time complexity? How and why?
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
Find the minimum element.
The array may contain duplicates.
代码
class Solution {
public:
int findMin(vector<int>& nums) {
int low=0,high=nums.size()-1,middle;
while(low<high){
middle=(low+high)/2;
if(nums[middle]<nums[high]){
high=middle; //不是middle+1,所以while条件时low<high
}else if(nums[middle]>nums[high]){
low=middle+1;
}else{
high--; //比较middle和high位置相等时(低谷和峰值可能存在左边,也可能存在右边),所以high--(middle有保留,所以无影响)
}
}
return nums[high];
}
};