假设以升序排序的数组以您不知道的某个枢轴旋转。
(即 [0,1,2,4,5,6,7] 可能成为 [4,5,6,7,0,1,2])。
找到最小的元素。
您可以假设数组中不存在重复项。
范例1:
输入: [3,4,5,1,2]
输出: 1
不要注意:这题是没有重复的数字,否则如果当前中后都相等的时候,遍历是最好的方式
不要注意2: 当left 和 right 相差只有1的时候,除以2 的结果一定为left,所以要在nums[left] 和 nums[right] 的时候判断两者是否相等。如果相等,left在mid的基础上+1。
代码:
class Solution {
//注意,没有重复的数字的情况!
public:
int findMin(vector<int>& nums) {
int left=0, right=nums.size()-1;
while(left<right){
if(nums[left]<nums[right])
return nums[left];
int mid=(left+right)/2; //no duplicate
//注意当l合r相差1的时候永远为left
if(nums[left] <= nums[mid] ){ //如果mid==left,必须要让left+1才可。否则right最小就会失去
left=mid+1;
}
else
right=mid;
}
return nums[left];
}
};