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.
这里引入了可能出现相同的数字,那么当middle begin end 三个tag对应的value都相等的时候,我们不能用之前那篇文章的方法来判断,这个时候我们就简单的遍历整个区域 来寻找最小值。
class Solution {
public:
int findMin(vector<int> &num) {
if(num.size()==0) return 0;
int begin = 0;
int end = num.size()-1;
while(num[begin]>=num[end])
{
if(end-begin==1)
return num[end];
int middle = (begin+end)>>1;
if(num[middle]==num[begin]&&num[middle]==num[end])
return getMin(num,begin,end);
if(num[middle]>=num[begin])
begin = middle+1;
else if(num[middle]<=num[end])
end = middle;
}
return num[begin];
}
int getMin(vector<int> &num,int s,int e)
{
int min = num[s];
for(int i = s;i<e;i++)
{
if(min>num[i])
min = num[i];
}
return min;
}
};