2020-08-28 劍指 Offer 11. 旋轉(zhuǎn)數(shù)組的最小數(shù)字

劍指 Offer 11. 旋轉(zhuǎn)數(shù)組的最小數(shù)字

把一個(gè)數(shù)組最開(kāi)始的若干個(gè)元素搬到數(shù)組的末尾,我們稱(chēng)之為數(shù)組的旋轉(zhuǎn)。輸入一個(gè)遞增排序的數(shù)組的一個(gè)旋轉(zhuǎn),輸出旋轉(zhuǎn)數(shù)組的最小元素。例如,數(shù)組 [3,4,5,1,2] 為 [1,2,3,4,5] 的一個(gè)旋轉(zhuǎn),該數(shù)組的最小值為1。

示例 1:

輸入:[3,4,5,1,2]
輸出:1
示例 2:

輸入:[2,2,2,0,1]
輸出:0

解決方法

因?yàn)轭}目中的旋轉(zhuǎn)總會(huì)把最小的元素置于數(shù)組當(dāng)中,所以可以使用二分查找的方法來(lái)尋找最小元素

public class Solution {
    public int MinArray(int[] numbers) {
        int i=0,j=numbers.Length-1;//i與j分別為數(shù)組中最左與最右元素的指針
        while(i<j){
            int m = (i+j) / 2;//m為二分查找中中間元素的指針
            if(numbers[m]>numbers[j])//若中間元素大于最右元素,則代表著中間元素在原數(shù)組的那部分
                i=m+1;//將最左元素指針指向m+1,靠近旋轉(zhuǎn)數(shù)組
            else if(numbers[m]<numbers[j])//若中間元素小于最右元素,代表中間元素在旋轉(zhuǎn)數(shù)組的那部分
                j=m;//將m的位置傳給j,縮小尋找訪問(wèn)
            else
                j--;//此時(shí)代表m值與旋轉(zhuǎn)數(shù)組的最大值相等,需要讓旋轉(zhuǎn)數(shù)組指針-1,這樣循環(huán)才能繼續(xù)下去,這個(gè)步驟不會(huì)影響到查找的準(zhǔn)確性,因?yàn)樾枰檎业氖亲钚?shù)
        }
        return numbers[i];
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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