文章目录
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 道「搜索旋转排序数组」题,侵权删。