#include <algorithm>
class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) {
        //使用左闭右闭区间
        int L=0;
        int R=rotateArray.size()-1;
        int mid=L+(R-L)/2;
        while(L<R)
        {
            //情况1,元素直接成非严格递增排列
            if(rotateArray[L]<rotateArray[R])
            {
                R=L;
                continue;
            }
		  	//情况2,如果mid和边缘两值相等,此时无法判断左右需要移动R,(R移动的特点是,下次收缩时不会直接排除R)
            if(rotateArray[mid]==rotateArray[R]&&rotateArray[R]==rotateArray[L])
            {
                --R;
                mid=L+(R-L)/2;
                continue;
            }
		  
		  //如果rotateArray[mid]>=rotateArray[L],最小值在mid右边,不含mid,
            if(rotateArray[mid]>=rotateArray[L])
            {
                L=mid+1;
                mid=L+(R-L)/2;
                continue;
            }
		  //如果rotateArray[mid]<=rotateArray[L],最小值在mid左边,可能是mid
            if(rotateArray[mid]<=rotateArray[R])
            {
                R=mid;
                mid=L+(R-L)/2;
                continue;
            }
        }

	  //返回最后的结果
        return rotateArray[R];


    }
};

分四种情况讨论