題目
把一個數組最開始的若干個元素搬到數組的末尾,我們稱之爲數組的旋轉。
輸入一個非遞減排序的數組的一個旋轉,輸出旋轉數組的最小元素。
例如數組{3,4,5,1,2}爲{1,2,3,4,5}的一個旋轉,該數組的最小值爲1。
NOTE:給出的所有元素都大於0,若數組大小爲0,請返回0。
思路
非遞減數組 有三種情況:
- 遞增 1 2 3 4 5
- 遞增,有重複 0 1 1 2 3
- 先增後減 1 2 3 2 1
那麼翻轉後,最小值一定在中間部分,那我們可以採用二分法,中間分開,分別找左右兩邊的最小值,比較。
left爲左邊下標,right爲最右邊下標
代碼
function minNumberInRotateArray(rotateArray){
let left=0,right=rotateArray.length-1;
// 數組長度大於0
while(right-left>1){
let mid=left+(right-left)>>0;
mid=left+(right-left>>0);
if(rotateArray[mid]>rotateArray[right]){
left=mid
}else{
right=mid
}
}
return Math.min(rotateArray[left],rotateArray[right])
}