LeetCode 153. 寻找旋转排序数组中的最小值

题目连接

153. 寻找旋转排序数组中的最小值

实现思路

因为数组被分成了两部分,我们每次拿到nums[mid]的值之后都应该和nums[right]进行比较

  1. 如果nums[mid] <= nums[right]的话,说明我们[mid, right]是有序的,那么我们nums[mid]有可能是最小值,所以right = mid
  2. 否则的话,说明我们[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];
    }
}
posted @ 2020-10-05 17:19  ZJPang  阅读(107)  评论(0编辑  收藏  举报