功能说明
两数之和要求在数组中找到和为目标值的两个下标。暴力双层循环是 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。输入数组不应被修改,重复值场景应使用不同下标。