旋转排序数组系列

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

参考文献

[1] 【LeetCode】33~154. 4 道「搜索旋转排序数组」题

猜你喜欢

转载自blog.csdn.net/qq_27690765/article/details/106747971