1. 题目情况就是打印最小的,突破点在于有效利用特性,该组的特性就是将前面的序列移动至末端,且分割后两个序列都是递增的。所以优化方案又是咱们熟悉的二分法(钠喊:万物皆可二分)

2.源代码(只在第一次使用了二分思想,是可以再优化的)

class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) {
        int n=rotateArray.size();
        int mid=(n-1)/2,dex=0,target=0;
        if( rotateArray[mid] >= rotateArray[0])
        {
            dex=mid++;
            for(;dex<n;dex++)
            {
                if(rotateArray[dex+1]<rotateArray[dex])
                    target= rotateArray[dex+1];
            }
        }    
        else{
             dex=mid--;
            for(;dex>0;dex--)
            {
                if(rotateArray[dex-1]>rotateArray[dex])
                    target= rotateArray[dex];
            }
        } 
         return target;
    }
};

3. 优化 参考Zosien

class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) {
        //先判空
          if(rotateArray.empty())
            return 0;
        int low = 0;//左端
        int hight = rotateArray.size() - 1;//右端
        int mid = 0;//中间
        while(low < hight){//如果左端<右端则正常
            mid = low + (hight - low)/2;
            if(rotateArray[mid] >= rotateArray[hight])
                //如果中间值大于右端,说明当前位于左递增序列,则目标在右边
                //左端=mid+1
                low =mid +1;
            else
                //说明在左端,右端为mid
                //之后进入while循环 不断向目标二分靠拢 到最后左端等于右端时就找到了
                hight = mid;
        }
        return rotateArray[hight];
    }
};