zoukankan      html  css  js  c++  java
  • [LeetCode] Find Minimum in Rotated Sorted Array II

    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.

    Hide Tags
     Array Binary Search
     

    在 http://www.cnblogs.com/diegodu/p/4576831.html 的基础上修改两点:

    1.  while(low < high && A[low] > A[high])  --->  while(low < high && A[low] >= A[high]) 因为存在重复元素。。

    2、在无重复元素时,中间元素与首元素相等,表示一共只有两个元素,low与high各指向一个。

    由于while循环中限制的大小关系,因此返回nums[high]即为最小值。

    然而当存在重复元素时,该条件并不能表示一共只有low和high指向的两个元素,

    而是说明low指向的元素重复了,因此删除其一,low ++即可。

    最后为什么返回的是A[low],因为A[low]返回的一直是 包含pivot的下边界,而且low一直在移动。。

    一旦出现A[low] < A[high 的情况说明找到了下边界,所以返回A[low],

    另外,如果数组是有序的,那么直接返回A[low]

    class Solution {
        public:
            int findMin(vector<int>& A)
            {
                int low = 0;
                int high = A.size() - 1;
    
                int mid = 0;
                // A[low] > A[high] ensure the pivot is between low and high
                while(low < high && A[low] >= A[high])
                {
                    mid = (low + high)/2;
    
                    cout << "low	" << low<< endl;
                    cout << "high	" << high << endl;
                    cout << "mid	" << mid<< endl;
    
                    if(A[low] < A[mid])//pivot is in bottom half, mid can't be lowest
                    {
                        low = mid + 1;
                    }
                    else if(A[low] == A[mid])//duplicates elements, just remove one
                    {
                        low ++;
                    }
                    else //pivot is in first half, mid may be lowest
                    {
                        high = mid;
                    }
                }
    
                return A[low];
            }
    };
  • 相关阅读:
    扩展卢卡斯定理
    扩展中国剩余定理
    扩展欧拉定理
    拓展BSGS
    删边最短路
    树 上 差分
    P4568 JLOI 飞行路线 分层最短路板子
    最短路相关
    P3758 TJOI2017 可乐
    bzoj4173 数学
  • 原文地址:https://www.cnblogs.com/diegodu/p/4578441.html
Copyright © 2011-2022 走看看