[Leetcode 154, Hard] Find Minimum in Rotated Sorted Array II

Problem:

Follow up for "Find Minimum in Rotated Sorted Array":
What if duplicates are allowed?

Would this affect the run-time complexity? How and why?

Suppose a sorted array 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.

Analysis:


Solutions:

C++:

    int findMin(vector<int>& nums) {
        if(nums.empty())
            return -1;

        if(nums.size() == 1)
            return nums[0];

        if(nums.size() == 2)
            return nums[0] >= nums[1] ? nums[1] : nums[0];

        int start = 0;
        int end = nums.size() - 1;
        for(; start < end; ++start) {
            if(nums[start] != nums[start + 1])
                break;
        }
        for(; end > start; --end) {
            if(nums[end] != nums[start])
                break;
        }
        if(start == end)
            return nums[end];

        if(nums[start] < nums[end])
            return nums[start];

        while(start < end) {
            if(start == end - 1)
                break;

            int mid = (start + end) / 2;
            int left = mid;
            int right = mid;
            for(; left > start; --left) {
                if(nums[left - 1] != nums[left])
                    break;
            }

            for(; right < end; ++right) {
                if(nums[right + 1] != nums[right])
                    break;
            }

            if(nums[mid] < nums[left - 1] && nums[mid] < nums[right + 1])
                return nums[mid];
            else if(nums[mid] < nums[start] && nums[mid] <= nums[end])
                end = left;
            else if(nums[mid] > nums[start] && nums[mid] >= nums[end])
                start = right;
        }

        return nums[start] >= nums[end] ? nums[end] : nums[start];
    }
Java:


Python:

發佈了194 篇原創文章 · 獲贊 4 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章