← 中文资源

简体中文版本

两数之和:查找和为目标值的下标

使用哈希表一次遍历找出和为目标值的两个数组下标,并校验数组元素与目标值是否为有限数字。

阅读英文原文

功能说明

两数之和要求在数组中找到和为目标值的两个下标。暴力双层循环是 O(n²),该实现用 Map 记录已访问值到下标,一次遍历即可得到结果,未找到时返回 null。它适合在价格、时间差和指标配对中查找满足条件的组合,并保持结果可预测。

关键代码

遍历时先计算 complement = target - value,若 Map 已有该补数,直接返回两个下标;否则把当前值映射到下标。先查后存保证不会把同一元素使用两次。所有数值必须为有限数字,遇到 NaN 或字符串立即抛错。

const complement = target - value;
if (seen.has(complement)) return [seen.get(complement), index];
seen.set(value, index);

使用注意

返回的是最先找到的一组下标,不保证字典序。数组中存在重复值时,Map 保留第一次出现的下标,因此 [3, 3] 能正确返回 [0, 1]。目标值必须是有限数字。该函数不修改原数组,也不返回多个解的组合。空数组返回 null。

验证方式

断言 twoSum([2, 7, 11, 15], 9) 返回 [0, 1],twoSum([3, 3], 6) 返回 [0, 1]。无解返回 null,空数组返回 null。包含 NaN 抛 TypeError,目标值为字符串抛 TypeError。输入数组不应被修改,重复值场景应使用不同下标。