找到旋转排序数组中的最小值
字数 1058 2025-10-27 17:17:02

找到旋转排序数组中的最小值

题目描述
假设一个按照升序排列的数组在某个未知的旋转点进行了旋转。例如,数组 [0,1,2,4,5,6,7] 可能变成 [4,5,6,7,0,1,2]。请找出并返回这个数组中的最小元素。你可以假设数组中不存在重复元素。

解题过程

  1. 理解问题
    题目中的数组原本是升序的,但经过一次旋转后,变成了两段有序的部分。例如,[4,5,6,7,0,1,2][4,5,6,7][0,1,2] 两个有序段组成。最小值是第二个有序段的第一个元素(即旋转点)。

  2. 暴力解法(非最优)
    直接遍历整个数组,记录遇到的最小值。时间复杂度是 O(n),但题目要求更高效的解法(通常暗示 O(log n))。

  3. 二分查找思路
    由于数组局部有序,可以用二分查找快速缩小搜索范围:

    • 设左指针 left 和右指针 right,初始分别指向数组首尾。
    • 计算中间位置 mid
    • 关键观察:如果 nums[mid] > nums[right],说明最小值在 mid 右侧(例如 [4,5,6,7,0,1,2] 中,mid 指向 7 时,7 > 2,最小值在右侧);否则最小值在 mid 左侧或就是 mid
    • 通过不断二分,最终 leftright 会指向最小值。
  4. 逐步推演示例
    nums = [4,5,6,7,0,1,2] 为例:

    • 初始:left=0, right=6, mid=3(值 7)。
      7 > 2 ∴ 最小值在右侧,令 left = mid + 1 = 4
    • 当前:left=4, right=6, mid=5(值 1)。
      1 < 2 ∴ 最小值在左侧或就是 mid,令 right = mid = 5
    • 当前:left=4, right=5, mid=4(值 0)。
      0 < 1 ∴ 令 right = mid = 4
    • 此时 left == right,最小值 nums[4] = 0
  5. 算法实现要点

    • 循环条件:left < right(相等时找到结果)。
    • 每次比较 nums[mid]nums[right],避免直接比较 nums[left](因为旋转点可能在任何位置)。
    • 无重复元素保证了比较的确定性。
  6. 复杂度分析
    每次将搜索范围减半,时间复杂度 O(log n),空间复杂度 O(1)。

找到旋转排序数组中的最小值 题目描述 假设一个按照升序排列的数组在某个未知的旋转点进行了旋转。例如,数组 [0,1,2,4,5,6,7] 可能变成 [4,5,6,7,0,1,2] 。请找出并返回这个数组中的最小元素。你可以假设数组中不存在重复元素。 解题过程 理解问题 题目中的数组原本是升序的,但经过一次旋转后,变成了两段有序的部分。例如, [4,5,6,7,0,1,2] 由 [4,5,6,7] 和 [0,1,2] 两个有序段组成。最小值是第二个有序段的第一个元素(即旋转点)。 暴力解法(非最优) 直接遍历整个数组,记录遇到的最小值。时间复杂度是 O(n),但题目要求更高效的解法(通常暗示 O(log n))。 二分查找思路 由于数组局部有序,可以用二分查找快速缩小搜索范围: 设左指针 left 和右指针 right ,初始分别指向数组首尾。 计算中间位置 mid 。 关键观察:如果 nums[mid] > nums[right] ,说明最小值在 mid 右侧(例如 [4,5,6,7,0,1,2] 中, mid 指向 7 时, 7 > 2 ,最小值在右侧);否则最小值在 mid 左侧或就是 mid 。 通过不断二分,最终 left 和 right 会指向最小值。 逐步推演示例 以 nums = [4,5,6,7,0,1,2] 为例: 初始: left=0 , right=6 , mid=3 (值 7 )。 ∵ 7 > 2 ∴ 最小值在右侧,令 left = mid + 1 = 4 。 当前: left=4 , right=6 , mid=5 (值 1 )。 ∵ 1 < 2 ∴ 最小值在左侧或就是 mid ,令 right = mid = 5 。 当前: left=4 , right=5 , mid=4 (值 0 )。 ∵ 0 < 1 ∴ 令 right = mid = 4 。 此时 left == right ,最小值 nums[4] = 0 。 算法实现要点 循环条件: left < right (相等时找到结果)。 每次比较 nums[mid] 和 nums[right] ,避免直接比较 nums[left] (因为旋转点可能在任何位置)。 无重复元素保证了比较的确定性。 复杂度分析 每次将搜索范围减半,时间复杂度 O(log n),空间复杂度 O(1)。