劍指offer 06:旋轉數組的最小數字

題目描述

把一個數組最開始的若干個元素搬到數組的末尾,我們稱之爲數組的旋轉。 輸入一個非減排序的數組的一個旋轉,輸出旋轉數組的最小元素。 例如數組{3,4,5,1,2}爲{1,2,3,4,5}的一個旋轉,該數組的最小值爲1。 NOTE:給出的所有元素都大於0,若數組大小爲0,請返回0。

解題代碼

二分寫法兩種形式:

1、縮小範圍時,right = mid, left = mid + 1, 取中間值時, mid = (left + right)/2 。

2、縮小範圍時,left = mid, right = mid - 1,取中間值時, mid = (left + right + 1)/2 。 

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)/2;
            if(array[mid]  == array[left] && array[mid] == array[right])
                right = right - 1;
            else if(array[mid] <= array[right])
                right = mid;
            else 
                left = mid + 1;
        }
        return array[left];
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章