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.
这个题也是考查的二分查找,只不过出现了重复元素,所以在每次判断时会有可能出现相等的可能,根据discuss中最高票的方法,如果相等,无法判断是否在mid的左边还是右边,所以上界左移一位,代码如下:
class Solution {
public:
int findMin(vector<int>& nums) {
int low=0,high=nums.size()-1;
int mid=0;
while(low<high){
mid=(low+high)/2;
if(nums[mid]>nums[high]){
low=mid+1;
}else if(nums[mid]<nums[high]){
high=mid;
}else{
high--;
}
}
return nums[low];
}
};