Algorithms first
两数之和 II - 输入有序数组 · 交互式算法学习
在有序数组中找出和为 target 的两个下标。
#167 · 双指针
两数之和 II - 输入有序数组
Two Sum II - Input Array Is Sorted
numbers = [2,7,11,15], target = 9线性序列3 个关键状态
步骤 12+15=17 太大。
r--2
07
111
215
3推荐
首尾双指针
时间
O(n)空间 O(1)和太小移动左指针,和太大移动右指针。
1function twoSum(a, target) {2 let l = 0,3 r = a.length - 1;4 while (l < r) {5 const sum = a[l] + a[r];6 if (sum === target) return [l + 1, r + 1];7 sum < target ? l++ : r--;8 }9}多语言参考
来源 · CC BY-SA 4.0 ↗Java · C++ · Go
这是一组同题正确实现,独立于上方当前动画方法;不同语言可能采用另一种正确策略。
1class Solution {2 public int[] twoSum(int[] numbers, int target) {3 for (int i = 0, n = numbers.length;; ++i) {4 int x = target - numbers[i];5 int l = i + 1, r = n - 1;6 while (l < r) {7 int mid = (l + r) >> 1;8 if (numbers[mid] >= x) {9 r = mid;10 } else {11 l = mid + 1;12 }13 }14 if (numbers[l] == x) {15 return new int[] {i + 1, l + 1};16 }17 }18 }19}交互式算法学习
从执行步骤真正理解 LeetCode 经典 150
本站整理 150 道高频算法面试题和 302 种解法。动画方法同步展示 JavaScript 与 Python;每题另提供 Java、C++ 与 Go 同题参考实现。
AlgoViz Lab
两数之和 II - 输入有序数组 · 解法对比
在有序数组中找出和为 target 的两个下标。
- 测试用例
numbers = [2,7,11,15], target = 9- 题目分类
- 双指针
- 解法对比
- 2
每项二分查找
固定一个数,在右侧二分寻找补数。
- 时间
O(n log n)- 空间
O(1)
首尾双指针
和太小移动左指针,和太大移动右指针。
- 时间
O(n)- 空间
O(1)