遇到有序数组的查找问题,优先考虑的就是时间复杂度为log(n)的二分查找
那么针对这道题目,根据对其特点的分析,确定了将中间元素和最左最右元素分别比较,以缩小范围的方法。
如果最左元素比中间元素大,那么最小的元素,一定位于此二者中间,则right = mid;
如4,5,1,2,3
如果最右元素比中间元素小,那么最小的元素,一定位于此二者之间,则left = mid + 1;
如3,4,5,1,2

import java.util.*;
import java.util.ArrayList;
public class Solution {
    public int minNumberInRotateArray(int [] array) {
        if (array.length == 0) {
            return 0;
        }
        int left = 0, right = array.length - 1;
        while (left < right) {
            int mid = left + (right - left) / 2;
            if (array[mid] > array[right]) {
                left = mid + 1;
            } else if (array[mid] < array[left]) {
                right = mid;
            } else {
                // 相等的情况,只能一步一步缩小,因为无法确定在哪个范围内,只能left++或right--
                // 但若处在一个递增序列,左边的肯定是当前最小的,所以不能left++;
                right--; 
            }
        }
        return array[left];

    }
}