LeetCode154(2021.4.9)

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

class Solution {
    public int findMin(int[] nums) {
        //恢复二段性,否则无法二分
        int l = 0, r = nums.length - 1;
        while (l < r && nums[0] == nums[r]) {
            r--;
        }
        //二分找旋转点
        while (l < r) {
            int mid = l + r + 1 >> 1;
            if (nums[mid] >= nums[0]) {
                l = mid;
            }
            else {
                r = mid - 1;
            }
        }
        return l == nums.length - 1 ? nums[0] : nums[l + 1];
    }
}

发表评论