图片说明
图片说明

 public int minNumberInRotateArray(int [] array) {
        if(array.length == 0)
            return 0;
        int l = 0, r = array.length-1;
        while(l < r){
            if(array[l] < array[r]){ // 这一步的作用是当l~r这部分 l位置小于r位置,那么l位置就是最小的那个,为什么呢?
                                    //当 array[mid] > array[r]的时候,l = mid+1,因为array[mid] > array[r],所以array[l]要是小于array[r],那么array[l]不就是最小的那个了吗?
                return array[l];
            }
            int mid = l + (r-l)/2;
            if(array[mid] < array[r]){
                r = mid;
            }else if(array[mid] > array[r]){
                l = mid+1;
            }else {
                --r;  //相等的时候为什么要r--
                       //因为当 3 1  2  2 2 的时候
                       //我们可以知道array[mid] == array[r],此时最小的数要么是array[mid],要么是mid以前的数,那么为了使得mid往前移位,我们就需要将r--
            }
        }
        return array[l];
    }