两数之和:给定数组 nums 与目标 target,返回和为 target 的两个元素下标。
思路:用哈希表存「值 → 下标」,遍历时查互补值是否存在,把 O(n^2) 降到 O(n)。
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 []
}- 时间
O(n),空间O(n) - 只遍历一次,边走边查;找到了立即返回
- 变体:三数之和用排序 + 双指针(需去重)