需要注意的几个点:
第一个:要考虑单调性的情况if(nums.size() <= 0) return -1;
第二个:该题利用的是左边递增区间的任意一个元素都比右边递增区间的任意一个元素大
而我们要取的答案是右边区间的左边界,所以判断条件应该是nums[0] <= nums[mid]
第三个:因为第一个因素已经排除掉了只有一个区间的原因,所以当nums[0] <= nums[mid]
的时候证明mid
当前
所指向的元素必然是在第一个区间里面,所以更改区间的时候要l = mid + 1
class Solution {
public:
int findMin(vector<int>& nums) {
if(nums.size() <= 0) return -1;
if(nums.back() > nums[0])return nums[0];
int l = 0, r = nums.size()-1;
while(l < r)
{
int mid = l + r>> 1;
if(nums[0] <= nums[mid]){
l = mid + 1;
}else {
r = mid;
}
}
return nums[r];
}
};