Algorithms first
寻找旋转排序数组中的最小值 · 交互式算法学习
找出旋转升序数组中的最小值。
#153 · 二分查找
寻找旋转排序数组中的最小值
Find Minimum in Rotated Sorted Array
nums = [3,4,5,1,2]线性序列3 个关键状态
步骤 1mid=2 值 5 > 右端 2。
l=33
04
15
21
32
4推荐
与右端比较二分
时间
O(log n)空间 O(1)mid 大于右端说明最小值在右侧,否则最小值在含 mid 的左侧。
1function findMin(a) {2 let l = 0,3 r = a.length - 1;4 while (l < r) {5 const m = (l + r) >> 1;6 if (a[m] > a[r]) l = m + 1;7 else r = m8 }9 return a[l];10}多语言参考
来源 · CC BY-SA 4.0 ↗Java · C++ · Go
这是一组同题正确实现,独立于上方当前动画方法;不同语言可能采用另一种正确策略。
1class Solution {2 public int findMin(int[] nums) {3 int l = 0, r = nums.length - 1;4 while (l < r) {5 int mid = (l + r) >> 1;6 if (nums[mid] > nums[nums.length - 1]) {7 l = mid + 1;8 } else {9 r = mid;10 }11 }12 return nums[l];13 }14}交互式算法学习
从执行步骤真正理解 LeetCode 经典 150
本站整理 150 道高频算法面试题和 302 种解法。动画方法同步展示 JavaScript 与 Python;每题另提供 Java、C++ 与 Go 同题参考实现。
AlgoViz Lab
寻找旋转排序数组中的最小值 · 解法对比
找出旋转升序数组中的最小值。
- 测试用例
nums = [3,4,5,1,2]- 题目分类
- 二分查找
- 解法对比
- 2
线性取最小
扫描并维护最小值。
- 时间
O(n)- 空间
O(1)
与右端比较二分
mid 大于右端说明最小值在右侧,否则最小值在含 mid 的左侧。
- 时间
O(log n)- 空间
O(1)