剑指 Offer 11. 旋转数组的最小数字

class Solution {
    public int minArray(int[] numbers) {
        int n = numbers.length;
        if(n == 1) return numbers[0];
        if(n == 2) return Math.min(numbers[0],numbers[1]);
        for(int i = 1;i<numbers.length-1;i++){
            if(numbers[i]< numbers[i-1] && numbers[i] <= numbers[i+1]){
                return numbers[i];
            }
        }
        return Math.min(numbers[0],numbers[n-1]);
    }
}

 

方法二:二分法

public int minArray(int[] numbers) {
        int i = 0, j = numbers.length - 1;
        while (i < j) {
            int m = (i + j) / 2;
            if (numbers[m] > numbers[j]) i = m + 1;
            else if (numbers[m] < numbers[j]) j = m;
            else j--;
        }
        return numbers[i];
    }

 

posted @ 2020-08-07 15:29  欣姐姐  阅读(98)  评论(0编辑  收藏  举报