文章目錄
Leetcode 33. 搜索旋轉排序數組
Leetcode 81. 搜索旋轉排序數組 II
Leetcode 153. 尋找旋轉排序數組中的最小值
Leetcode 154. 尋找旋轉排序數組中的最小值 II
總結
在旋轉排序數組中進行二分查找時,無論是搜索特定值,還是搜索最小值,都需要 在左右兩個區間裏,找到 連續遞增 的那個區間。
判斷區間是否「連續遞增」,只需比較區間邊界值: 如果 nums[left] <= nums[mid]
,則區間 [left,mid]
連續遞增;反之,區間 [mid,right]
連續遞增。但是上述判斷僅適用於數組中不含重複元素的情況,如果數組中包含重複元素,那麼在 nums[left]==nums[mid]
時將退化爲線性查找。
找到「連續遞增」的區間後,問題就變得簡單了許多:
- 33 題,查找特定值:只需要 判斷目標值在「連續遞增」區間內還是區間外。比如當區間
[left,mid]
連續遞增時,若目標值位於該區間內,則right = mid-1
;若目標值位於該區間外,則left = mid+1
。如果是區間[mid,right]
連續遞增,也可以用類似的方法收縮區間 - 153 題,查找最小值:只需要排除左側或者右側的一段「連續區間」,使得 [left,right] 不連續,就可以找到最小值。
上面一段總結完全源自 【LeetCode】33~154. 4 道「搜索旋轉排序數組」題,侵權刪。