154. Find Minimum in Rotated Sorted Array II (Array; Divide-and-Conquer)

Posted joannae

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了154. Find Minimum in Rotated Sorted Array II (Array; Divide-and-Conquer)相关的知识,希望对你有一定的参考价值。

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

Find the minimum element.

The array may contain duplicates.

 

思路:有重复元素的时候,不能按I中这么分三类(反例:Input: [3,3,1,3]=>将roate in right判断成没有rotate)。解决方法是,当碰到nums[start]=nums[end]的情况时,end-1,寻找不同元素再进行二分法。

class Solution {
public:
    int findMin(vector<int>& nums) {
        return dfs(nums,0,nums.size()-1);
    }
    
    int dfs(vector<int>& nums, int start, int end){
        if(start==end) return nums[start];
        if(nums[start]==nums[end]) return dfs(nums,start, end-1);
        
        int mid = start + ((end - start) >> 1);
        if(nums[mid] > nums[end]){ //rotate in the right
            return dfs(nums, mid+1,end);
        }
        else if(nums[start] <= nums[mid]){ //no rotate
            return nums[start];
        }
        else{ //rorate in the left
            return dfs(nums, start, mid);
        }
    }
};

 

以上是关于154. Find Minimum in Rotated Sorted Array II (Array; Divide-and-Conquer)的主要内容,如果未能解决你的问题,请参考以下文章

154. Find Minimum in Rotated Sorted Array II

#Leetcode# 154. Find Minimum in Rotated Sorted Array II

154. Find Minimum in Rotated Sorted Array II

154. Find Minimum in Rotated Sorted Array II(Binary search)

154. Find Minimum in Rotated Sorted Array II

154 Find Minimum in Rotated Sorted Array II