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.
递归
class Solution {
public:
int findMin(vector<int> &num) {
int n = num.size() - 1;
if(num.size() == 1 || num[0] < num[n]) return num[0];//先考虑特殊情况
return find(0,n,num);
}
int find(int first,int end,vector<int> &num){
int mid = (first + end)/2;
if(num[mid] < num[mid - 1] && num[mid] <= num[end])
return num[mid];
if(num[mid] >= num[first] && num[mid] >= num[end])
return find(mid + 1,end,num);
else return find(first,mid - 1,num);
}
};
二分法
class Solution {
public:
int findMin(vector<int> &num) {
int n = num.size() - 1;
int first = 0,end = n;
while(first <= end){
int mid = (first + end)/2;
if(num[mid] > num[n])
first = mid + 1;
else
end = mid - 1;
}
return num[first];
}
};