153. 寻找旋转排序数组中的最小值
分析
-
未旋转情况:
- 如果数组的首元素小于尾元素,说明数组未旋转,直接返回
nums[0]
- 如果数组的首元素小于尾元素,说明数组未旋转,直接返回
-
二分查找旋转点:
- 在旋转数组中,最小值位于右部分的起点。
- 使用二分查找,通过比较 nums[mid] 和 nums[0] 的值,可以判断最小值的所在位置:
- 如果
nums[mid] >= nums[0]
,说明最小值在右侧,缩小左边界 - 如果
nums[mid] < nums[0]
,说明最小值在左侧或当前mid
是最小值,缩小右边界
- 如果
- 最终,
r + 1
指向最小值的位置
时间复杂度
二分查找的时间复杂度为 O(logn)
空间复杂度
使用常量级额外空间,空间复杂度为 O(1)
C++代码
|
|