思路
- 使用哈希法:需要快速查询一个元素是否出现过,或者一个元素是否在集合里时
本题需要一个集合来存放我们遍历过的元素,然后在遍历数组的时候去询问这个集合,符合要求的某元素是否遍历过,也就是 是否出现在这个集合。
- 因为要返回下标,所以使用Map集合,key存放元素值,value存放元素下标
步骤
创建哈希表:初始化一个空的
Map
,用于存储数组中每个元素的值及其对应的索引。遍历数组:使用一个
for
循环逐个检查数组nums
中的每个元素。计算补数:对于当前元素,计算
target
与它的差值,称为补数。查找补数:检查
Map
中是否已经包含了这个补数。找到匹配:如果找到了补数,说明之前已经遍历过一个元素与当前元素相加可以得到
target
,返回这两个元素的索引。存储元素索引:如果当前元素的补数不在
Map
中,将当前元素和它的索引存入Map
。结束条件:如果遍历完整个数组都没有找到匹配的两个数,返回一个空数组。
题目
示例代码
var twoSum = function(nums, target) {
// 创建一个 Map 对象来存储已经遍历过的数字及其索引
let map = new Map();
// 遍历数组的每个元素
for (let i = 0; i < nums.length; i++) {
// 计算当前元素与目标值的差值
let complement = target - nums[i];
// 检查 map 中是否已经存在与当前元素的差值相等的元素
if (map.has(complement)) {
// 如果存在,返回一个数组,包含 map 中存储的索引和当前元素的索引
// map.get(complement) 是找到的与当前元素和为目标值的另一个元素的索引
// i 是当前元素的索引
return [map.get(complement), i];
}
// 将当前元素及其索引存入 map 中
// 这样下次遍历时可以直接查找与之配对的元素
map.set(nums[i], i);
}
// 如果遍历完数组都没有找到符合条件的两个数,返回空数组
return [];
};
欢迎指正!