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

解题思路参考代码中的注释:
class Solution {
    
    // 本题和第81题(https://leetcode-cn.com/problems/search-in-rotated-sorted-array-ii/)类似
    public int findMin(int[] nums) {
        
        // 搜索区间[left, right]
        int left = 0, right = nums.length - 1;
        while (left < right) {
            
            // 数组中可能有重复元素,而左端点和右端点相同会影响判断
            // 因此此时将右指针左移一位,然后进行下一轮循环
            // 本题和上一题的唯一差别就是多了这一段代码
            if (nums[left] == nums[right]) {
                right--;
                continue;
            }
            
            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];
    }
}
全部评论

相关推荐

02-26 13:56
已编辑
重庆财经学院 Java
King987:你有实习经历,但是写的也太简单了,这肯定是不行的,你主要要包装实习经历这一块,看我的作品,你自己包装一下吧,或者发我,我给你出一期作品
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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