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> &num) {
int n = num.size();
assert(n > 0);
return find(num,0,n-1);
}
int find(vector<int> &num, int begin, int end)
{
int ans = num[begin];
while(begin <= end)
{
int mid = begin + (end-begin)/2;
ans = min(ans, num[mid]);
if(begin == end)
break;
if(num[begin] < num[end])
{
ans = min(ans,num[begin]);
break;
}
if(num[mid] < num[end])
end = mid -1;
else if(num[mid] > num[begin])
begin = mid +1;
else
{
if(begin < mid)
ans = min(ans,find(num,begin,mid-1));
if(mid < end)
ans = min(ans,find(num,mid+1,end));
break;
}
}
return ans;
}
};