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.
You may assume no duplicate exists in the array.
1:注意特殊情况,数组为空,只有一个元素;2:第一个数字小于最后一个数字的时候,直接返回;3:二分查找,查找的结束条件是start < end; 此时end对应的数组数值是最小值。
int findMin(vector<int> &num)
{
if(num.size() == 0)
{
return 0;
}
unsigned long size = num.size();
if(size == 1 || num[0] < num[size-1])
{
return num[0];
}
unsigned long start = 0;
unsigned long end = size - 1;
while(start < end -1)
{
unsigned long middle = (start + end) / 2;
if(num[middle] > num[start])
{
start = middle;
}
else
{
end = middle;
}
}
return num[end];
}