有一個長度為 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]
}