因为数组被分成了两部分,我们每次拿到nums[mid]的值之后都应该和nums[right]进行比较
nums[mid] <= nums[right]的话,说明我们[mid, right]是有序的,那么我们nums[mid]有可能是最小值,所以right = mid[left, mid]是有序的,我们需要往右半部分进行查询,因为当前的值比右边最大值还大,我们可以抛弃mid,直接让left = mid + 1nums[right]即可。class Solution {
public int findMin(int[] nums) {
int left = 0;
int right = nums.length - 1;
while(left < right){
int mid = left + ((right - left) >> 1);
if(nums[mid] <= nums[right]){
right = mid;
}else{
left = mid + 1;
}
}
return nums[right];
}
}
原文:https://www.cnblogs.com/ZJPaang/p/13770479.html