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

有一個長度為 n 的非降序數(shù)組,比如[1,2,3,4,5],將它進行旋轉(zhuǎn),即把一個數(shù)組最開始的若干個元素搬到數(shù)組的末尾,變成一個旋轉(zhuǎn)數(shù)組,比如變成了[3,4,5,1,2],或者[4,5,1,2,3]這樣的。請問,給定這樣一個旋轉(zhuǎn)數(shù)組,求數(shù)組中的最小值。
解題思路

1.有序或部分有序適合用二分法
2.縮小比較范圍
3.頭尾各設(shè)置一個游標,和中間值作比較。
若頭部元素值比尾部元素值小,說明當前區(qū)間有序,可直接返回頭部元素
若頭部元素值比中間值小,則說明頭部應(yīng)當指向中間元素
若頭部元素值比中間值大,則說明尾部應(yīng)當指向中間元素
若頭尾相等,則把頭部元素向后移動或把尾部元素向左移動
直到頭部元素不再小于尾部元素

function minNumberInRotateArray( rotateArray )
{
    let first = 0;
    let last = rotateArray.length -1;
    while( first < last ) {
        if( rotateArray[first] < rotateArray[ last ] ) return rotateArray[first]
        const mid = first + Math.floor( ( last - first ) / 2 )
        if(  rotateArray[mid] > rotateArray[ first ] ) {
            first = mid + 1
        } else if(  rotateArray[mid] < rotateArray[ first ] ){
            last = mid
        } else {
            first++
        }
    }
    return rotateArray[first]
}
?著作權(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)容

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