Algorithms first
两数之和 · 交互式算法学习
找出和为 target 的两个数组下标。
#1 · 哈希表
两数之和
Two Sum
nums = [2,7,11,15], target = 9线性序列4 个关键状态
步骤 1读取 2,先计算补数 7。
i=0, x=2, need=7i
2
07
111
215
3target9need7seen{}
推荐
补数哈希表
时间
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}多语言参考
来源 · CC BY-SA 4.0 ↗Java · C++ · Go
这是一组同题正确实现,独立于上方当前动画方法;不同语言可能采用另一种正确策略。
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 同题参考实现。
AlgoViz Lab
两数之和 · 解法对比
找出和为 target 的两个数组下标。
- 测试用例
nums = [2,7,11,15], target = 9- 题目分类
- 哈希表
- 解法对比
- 2
双重枚举
检查每一对数字之和。
- 时间
O(n²)- 空间
O(1)
补数哈希表
扫描当前数字时,检查此前是否见过它的补数。
- 时间
O(n)- 空间
O(n)