leetcode 153 寻找旋转排序数组中的最小值(二分)

33 阅读1分钟

153. 寻找旋转排序数组中的最小值 - 力扣(LeetCode) 声明:菜鸡学习记录,大佬请滑走

image.png 发现用左端点和中间节点比较难判断,那就改成右节点和中间节点

class Solution {
    public int findMin(int[] nums) {
        // 由于保持局部递增性,找最小节点
        // 用中间节点和右边界节点来比较
        // while l < r
        // if a[mid] > a[r] l = mid+1
        // else a[mid] <= a[r] r = mid
        int l = 0, r = nums.length - 1;
        while(l < r) {
            int mid = (l+r)>>1;
            if (nums[mid] > nums[r]) { // 说明已经乱序,最小值肯定在右边
                l = mid + 1;
            }
            else {
                r = mid;
            }
        }
        return nums[l];

    }
}