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.
1:特殊情况;2:二分查找;3:如果A[start] == A[middle] && A[middle] == A[end] 直接进行线性查找
int findMin(vector<int> &num)
{
int size = static_cast<int>(num.size());
if(size == 0)
{
return 0;
}
if(size == 1 || num[0] < num[size-1])
{
return num[0];
}
int start = 0;
int end = size - 1;
while(start < end-1)
{
int middle = (start + end) / 2;
if(num[middle] == num[start] && num[middle] == num[end])
{
return findMinLinear(num);
}
else
{
if(num[middle] >= num[start])
{
start = middle;
}
else
{
end = middle;
}
}
}
return num[end];
}
int findMinLinear(vector<int> &num)
{
int min = num[0];
for(auto itr = num.begin(); itr != num.end(); itr++)
{
if((*itr) < min)
{
min = (*itr);
}
}
return min;
}