因为数组被分成了两部分,我们每次拿到nums[mid]
的值之后都应该和nums[right]
进行比较
nums[mid] <= nums[right]
的话,说明我们[mid, right]
是有序的,那么我们nums[mid]
有可能是最小值,所以right = mid
[left, mid]
是有序的,我们需要往右半部分进行查询,因为当前的值比右边最大值还大,我们可以抛弃mid
,直接让left = mid + 1
nums[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