美文网首页
Leetcode-154-Find Minimum in Rot

Leetcode-154-Find Minimum in Rot

作者: 单调不减 | 来源:发表于2019-05-22 00:32 被阅读0次

    这题是153题的一个变形,相比153题只多了一个条件,那就是可能包含重复元素。我们先看看若不包含重复元素这题怎么用O(logn)时间搞定。

    其实就是一个简单的BinarySearch,代码如下:

    class Solution {
    public:
        int findMin(vector<int>& nums) 
        {
            int left=0,right=nums.size()-1,mid;
            while(left<right)
            {
                mid=(left+right)/2;
                if(nums[mid]>nums[right])
                    left=mid+1;
                else if(nums[mid]<nums[right])
                    right=mid;
            }
            return nums[left];
        }
    };
    

    加上重复元素这个条件,代码只多了一行,就是nums[mid]==nums[right]的情况。但是就因为这一行,算法的复杂度变成了O(n),而且这个复杂度在worst case情况下不可改进。

    class Solution 
    {
    public:
        int findMin(vector<int>& nums) 
        {
            int left=0,right=nums.size()-1,mid;
            while(left<right)
            {
                mid=(left+right)/2;
                if(nums[mid]>nums[right])
                    left=mid+1;
                else if(nums[mid]<nums[right])
                    right=mid;
                else
                    right--;
            }
            return nums[left];
        }
    };
    

    相关文章

      网友评论

          本文标题:Leetcode-154-Find Minimum in Rot

          本文链接:https://www.haomeiwen.com/subject/useezqtx.html