【力扣刷题|第五天作业】二分查找-寻找旋转排序数组中的最小值 II

【力扣刷题|第五天作业】二分查找-寻找旋转排序数组中的最小值 II_第1张图片

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

力扣题目网址:寻找旋转排序数组中的最小值 II

这道题和寻找153题很相似,但是这道题我们跟数组最后一个数比较的时候,我们不能确定这个数是在最小值的左边还是在最小值的右边,例如数组3 3 3 3 1 3 33 1 3 3 3 3 3我们第一取 mid 的时候他是3,而最后一个数也是3,那么我们该判断他是在左边还是右边呢。这时候我们可以舍弃最后一个数,继续二分。如果他是最小值,mid等于最后一个数,说明最小值还在剩下的数组当中,如果不是最小值,我们排除了一个数。

class Solution {
    public int findMin(int[] nums) {
        int left = 0, right = nums.length - 2;
        int end = nums.length - 1;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            if(nums[mid] > nums[right+1]) {
                left = mid + 1;
            }else if(nums[mid] < nums[right+1]) {
                right = mid - 1;
            }else {
                right --;
            }
        }
        return nums[left];
    }
}

你可能感兴趣的:(力扣刷题,leetcode,算法)