没啥说的,因为没有重复元素,所以很容易判断数列有没有旋转。
如果旋转了,也很容易找出发生旋转的位置
class Solution {
public:
int upperBound(int start,int end,int val,const vector<int>& num)
{
while(start<end)
{
int mid=start+(end-start)/2;
if(num[mid]>val)
{
start=mid+1;
}
else
{
end=mid;
}
}
return start;
}
int findMin(vector<int> &num) {
int n=num.size();
if(n==0)
{
return -1;//impossible
}
if(n==1)
{
return num[0];
}
if(num[0]<num[n-1])
{
//no rotate
return num[0];
}
else
{
int pos=upperBound(0,n,num[n-1],num);
return num[pos];
}
}
};