Algorithms first

两数之和 · 交互式算法学习

找出和为 target 的两个数组下标。

#1 · 哈希表

两数之和

Two Sum

测试用例nums = [2,7,11,15], target = 9
线性序列4 个关键状态
步骤 1读取 2,先计算补数 7。i=0, x=2, need=7
i
2
0
7
1
11
2
15
3
target9need7seen{}
推荐

补数哈希表

时间 O(n)空间 O(n)

扫描当前数字时,检查此前是否见过它的补数。

1function twoSum(a, t) {2  const seen = new Map();3  for (let i = 0; i < a.length; i++) {4    if (seen.has(t - a[i])) return [seen.get(t - a[i]), i];5    seen.set(a[i], i);6  }7}
多语言参考

Java · C++ · Go

来源 · CC BY-SA 4.0 ↗

这是一组同题正确实现,独立于上方当前动画方法;不同语言可能采用另一种正确策略。

1class Solution {2    public int[] twoSum(int[] nums, int target) {3        Map<Integer, Integer> d = new HashMap<>();4        for (int i = 0;; ++i) {5            int x = nums[i];6            int y = target - x;7            if (d.containsKey(y)) {8                return new int[] {d.get(y), i};9            }10            d.put(x, i);11        }12    }13}
交互式算法学习

从执行步骤真正理解 LeetCode 经典 150

本站整理 150 道高频算法面试题和 302 种解法。动画方法同步展示 JavaScript 与 Python;每题另提供 Java、C++ 与 Go 同题参考实现。

多形态可视化数组、矩阵、DP 表、递归树、树图、链表、栈队列堆、区间和状态机按解法选择。
动画与代码同步当前状态、步骤说明、变量和代码高亮保持一一对应,可逐步播放和回退。
适合面试复习每种方案都给出思路、时间复杂度、空间复杂度、测试用例和 LeetCode 中文原题入口。
AlgoViz Lab

两数之和 · 解法对比

找出和为 target 的两个数组下标。

测试用例
nums = [2,7,11,15], target = 9
题目分类
哈希表
解法对比
2
方案 1

双重枚举

检查每一对数字之和。

时间
O(n²)
空间
O(1)
方案 2

补数哈希表

扫描当前数字时,检查此前是否见过它的补数。

时间
O(n)
空间
O(n)