LeetCode 153. 寻找旋转排序数组中的最小值
题目连接
实现思路
因为数组被分成了两部分,我们每次拿到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];
}
}