分析:二分查詢的變種,沒有具體的值進行比較,主要用高低位的值來和中間值進行比較,進而縮小範圍。
1.arr[low] < arr[high] 說明陣列本身並沒有被旋轉,因為陣列本身是乙個非遞減陣列,arr[n] <= arr[n+1] 就必然成立,如果陣列被旋轉了那麼 arr[head] >= arr[tail] 就必然成立
2.arr[low] > arr[high] 說明mid位於沒有被旋轉的子串行中,縮小範圍left = mid + 1
3. arr[low] > arr[mid] < arr[high] 說明mid位於被旋轉的子串行中,縮小範圍 high= mid,注意這裡high=mid-1是錯誤的,因為mid有可能就是最小值
4.其他情況(arr[left] = arr[mid] = arr[right]) low++
來自博主
這只是一般情況,我們還有特殊情況需要考慮那就是 arr[left] = arr[mid] = arr[right]
這個時候我們需要進行low++,逐步縮小左邊的範圍,這個時候我就想著,為啥不是high--呢,
如果我們換成high--,如下圖,當high--的話就完美的錯過了最小值
**如下
劍指Offer 6 旋轉陣列的最小元素
description把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。可以直接binary search,每次mid和r的...
6 旋轉陣列的最小數字 劍指offer
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。直接遍歷,找到最小值為止 class solution if index ...
rotateArrayMin旋轉陣列的最小數字
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。牛客url 這是一道二分查詢變形的題目 class solution i...