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

解题思路参考代码中的注释:
class Solution {
    
    // 本题和第33题(https://leetcode-cn.com/problems/search-in-rotated-sorted-array/)类似
    public int findMin(int[] nums) {
        
        // 搜索区间[left, right]
        int left = 0, right = nums.length - 1;
        while (left < right) {
            int mid = (left + right) >> 1;
            
            // 如果中间点大于等于左端点,说明[left, mid]是有序的
            if (nums[mid] >= nums[left]) {

                // 由于[left, mid]是有序的,因此nums[left]是该区间上的最小值
                // 那么只要nums[left] < nums[right],就可以断定nums[left]是[left, right]区间上的最小元素
                if (nums[left] < nums[right]) {
                    return nums[left];
                }
                
                // 否则继续二分搜索
                left = mid + 1;
            
            // 如果中间点小于左端点,说明[mid, right]是有序的
            } else {
                if (nums[mid] < nums[mid - 1]) {
                    return nums[mid];
                }
                right = mid - 1;
            }
        }
        return nums[left];
    }
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务