旋转数组的最小数字

发现这个程序有几个点特别好:

1、旋转数组意味着如果某部分的序列前面的数小于后面的数则是顺序排列的,则可以直接取前面的数为最小值

  while(rotateArray[mid]>=rotateArray[high])  //这个判断可以直接省略中间很多顺序串的比较

2、if(high-low ==1) 配合while判断可以直接省略最后几步判断

3、else if(rotateArray[mid]>=rotateArray[low])

                     low=mid;

            else if(rotateArray[mid]<=rotateArray[high])

                    high=mid;  // 假设中间的是最小的

 

class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) {
      if(rotateArray.size()==0) return 0;
      int low=0,high=rotateArray.size()-1,mid=low;
        while(rotateArray[mid]>=rotateArray[high])
        {
            if(high-low ==1)
               return rotateArray[high];
            mid=(low+high)/2;
            if(rotateArray[low]==rotateArray[mid] && rotateArray[mid]==rotateArray[high])
                return inOrder(rotateArray,low,high);
            else if(rotateArray[mid]>=rotateArray[low])
                     low=mid;
                else if(rotateArray[mid]<=rotateArray[high])
                      high=mid;
            
        } 
        return rotateArray[low];
        }
    int inOrder(vector<int> str,int low,int high)
        {
        int min=str[low];
        for(int i=low+1;i<=high;i++)
            if(min>str[i])min=str[i];
            return min;
    }
};

 

posted on 2016-03-18 19:08  RenewDo  阅读(142)  评论(0编辑  收藏  举报

导航