劍指offer(js版) 06 --- 旋轉數組的最小數字

題目

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

思路

非遞減數組 有三種情況:

  1. 遞增 1 2 3 4 5
  2. 遞增,有重複 0 1 1 2 3
  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])
}

二分法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章