两数之和、三数之和、k 数之和通用模板
这几个题其实是一套思路:
- 两数之和:哈希表 / 双指针
- 三数之和:排序 + 枚举 + 双指针
- k 数之和:递归降维,最终转成 两数之和
1. 两数之和
题目
给定数组 nums 和目标值 target,找出两个数,使它们和为 target。
写法一:返回下标(最常见)
function twoSum(nums, target) { const map = new Map(); for (let i = 0; i < nums.length; i++) { const need = target - nums[i]; if (map.has(need)) { return [map.get(need), i]; } map.set(nums[i], i); } return []; }思路
- 遍历数组
- 每次看
target - nums[i]是否已经出现过 - 出现过就直接返回
复杂度
- 时间:
O(n)<
