0二分查詢簡單 牛客NC.71旋轉陣列的最小數字 leetcode劍指 Offer 11. 旋轉陣列的最小數字

董明明-2021年秋招發表於2020-12-05

劍指 Offer 11. 旋轉陣列的最小數字

問題描述

把一個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入一個遞增排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。例如,陣列 [3,4,5,1,2] 為 [1,2,3,4,5] 的一個旋轉,該陣列的最小值為1。

思路

旋轉陣列的最小值與最大值構成旋轉陣列的分界線。
numbers類似 [1,0,1,1,1] 或者[1,1,1,0,1],此時最小數字不好判斷在mid左邊
right–.

class Solution {
    public int minArray(int[] numbers) {
        if(numbers.length == 0){
           return 0;
        }
        int left = 0, right = numbers.length-1, mid;
        while(left != right){
            mid = left + (right - left)/2;
            if(numbers[mid] > numbers[right]){
                left = mid + 1;
            }else if(numbers[mid] < numbers[right]){
                right = mid;//因為中心點也有可能是最小值,所以不能是mid-1。
            }else{
                right--;
            }
        }
        return numbers[left];
    }
}

相關文章