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>& nums) {
int low=0,high=nums.size()-1,middle;
while(low<=high){ //low<=high
middle=(low+high)/2;
if(nums[middle]<nums[high]){
high=middle; //不是middle+1
}else if(nums[middle]>nums[high]){
low=middle+1;
}else{
return nums[high];
}
}
return nums[high];
}
};
代码更精简的版本:
class Solution {
public:
int findMin(vector<int>& nums) {
int low=0,high=nums.size()-1,middle;
//保证得到,low=middle+1
while(low<high){ //low<high
middle=(low+high)/2;
if(nums[middle]<=nums[high]){
high=middle; //不是middle+1,所以while条件时low<high
}else{
low=middle+1;
}
}
return nums[high];
}
};