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

空心的夢發表於2020-10-03

題目11. 旋轉陣列的最小數字
在這裡插入圖片描述

思路

  • 初始化兩個指標leftright分別指向陣列首尾;
  • 開始二分搜尋,求mid,然後和right位置的數字進行比較;
    • nums[mid] 大於 nums[right],則說明最小值在mid右側,那麼左邊界left = mid + 1;
    • nums[mid] 小於 nums[right],則說明最小值在mid左側,那麼右邊界right = mid;
    • nums[mid] 等於 nums[right],那麼右邊界左移,right --;

image.png

class Solution {
    public int minArray(int[] numbers) {
        int left = 0;
        int right = numbers.length - 1;
        int 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;
            }else{
                right --;
            }
        }
        return numbers[left];
    }
}

相關文章