旋轉(zhuǎn)數(shù)組的最小值

題目描述

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

解題思路一

最簡單粗暴的方法,窮舉出最小值,使得題意無意義,pass

public int minNumberInRotateArray(int[] array) {
    if (array == null || array.length == 0)
        return 0;
    else {
        int min = array[0];
        for (int i = 1; i < array.length; i++) {
            if (array[i] < min) {
                min = array[i];
            }
        }
        return min;
    }
}

解題思路二

對思路一進行優(yōu)化,進行旋轉(zhuǎn)后,數(shù)組最小值小于前一位

public int minNumberInRotateArray2(int[] array) {
    if (array == null || array.length == 0)
        return 0;
    else {
        for (int i = 1; i < array.length; i++) {
            if (array[i] < array[i - 1])
                return array[i];
        }
        return array[0];  //數(shù)組值相同
    }
}

解題思路三

用類似二分查找的方法,不停收斂查找范圍。

參考??徒忸}https://www.nowcoder.com/questionTerminal/9f3231a991af4f55b95579b44b7a01ba?answerType=1&f=discussion

807319133_1566217781994_E0D8DA4D79E73A35EB4365215E2F13BB.png
public int minNumberInRotateArray3(int[] array) {
    if (array == null || array.length == 0) {
        return 0;
    } else {
        int left = 0;  //范圍的左邊界
        int right = array.length - 1; //范圍的右邊界,由提意可得左部分>=右部分
        int middle;
        while (left < right) {
            if (array[left] < array[right])  //考慮到特殊情況10111
                return array[left];
            middle = (left + right) / 2;//取中間
            if (array[left] < array[middle]) {
                //證明[left...middle]區(qū)間仍在左部分,直接left右移到middle+1
                left = middle + 1;
            }else if(array[middle] < array[right]){
                //證明[middle.....right]區(qū)間在右部分,直接right左移到middle,而不是middle處,middle處可能是最小值
                right = middle;
            }else{
                //無法判斷是在哪個部分,縮小區(qū)域
                left ++;
            }
        }
        return array[left];
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 題目:把一個數(shù)組最開始的若干個元素搬到數(shù)組的末尾,我們稱之為數(shù)組的旋轉(zhuǎn)。 輸入一個非遞減排序的數(shù)組的一個旋轉(zhuǎn),輸出...
    莫小西0213閱讀 107評論 0 0
  • 把一個數(shù)組最開始的若干個元素搬到數(shù)組的末尾,我們稱之為數(shù)組的旋轉(zhuǎn)。 輸入一個非遞減排序的數(shù)組的一個旋轉(zhuǎn),輸出旋轉(zhuǎn)數(shù)...
    繁星追逐閱讀 760評論 0 0
  • 題目:把一個數(shù)組最開始的若干個元素搬到數(shù)組的末尾,我們稱之為數(shù)組的旋轉(zhuǎn)。輸入一個遞增排序的數(shù)組的一個旋轉(zhuǎn),輸出旋轉(zhuǎn)...
    二十歲的彈簧閱讀 548評論 0 0
  • 聲明: 本總結(jié)僅為個人學(xué)習(xí)總結(jié),以防止遺忘而作,不得轉(zhuǎn)載和商用。 問題描述假定一個排序數(shù)組(已經(jīng)有序) 以某個未知...
    春天還沒到閱讀 594評論 0 0
  • 旋轉(zhuǎn)數(shù)組的最小值 所謂旋轉(zhuǎn)數(shù)組,即是遞增有序數(shù)組旋轉(zhuǎn)右移動若干位得到的數(shù)組,這里的右移和java里的>>>有點不同...
    senninha閱讀 218評論 0 0

友情鏈接更多精彩內(nèi)容