Find Minimum in Rotated Sorted Array II

来源:互联网 发布:淘宝的店铺经营许可 编辑:程序博客网 时间:2024/05/02 04:49

与Find Minimum in Rotated Sorted Array类似,只是在num[0]==num[n-1]时需要注意,这时不能根据num[n-1]的值来将数列一分为二。需要首先从数列头开始扫描,直到找到不等于数列头的元素,这时就可以退化为Find Minimum in Rotated Sorted Array来解决


class Solution {public:    int findSecondPartHead(int start,int end,int val,const vector<int>& num)    {        while(start<end)        {            int mid=start+(end-start)/2;            if(num[mid]>val)            {                start=mid+1;            }            else            {                end=mid;            }        }        return start;    }    int findMin(vector<int> &num) {        int n=num.size();        if(n==0)        {            return -1;        }        if(n==1)        {            return num[0];        }        if(num[0]<num[n-1])        {            return num[0];        }        else if(num[0]>num[n-1])        {            int pos=findSecondPartHead(0,n,num[n-1],num);            return num[pos];        }        else        {            //hard part            //first scan from the start, find the frist position that val is bigger than the start position val            int i=1;            while((i<n)&&(num[0]==num[i]))            {                i++;            }            if(i==n)            {                return num[0];            }            else            {                int pos=findSecondPartHead(i,n,num[n-1],num);                return num[pos];            }        }    }};


0 0
原创粉丝点击