原题链接: leetcode-cn.com/problems/tw…
解题思路:
- 遍历数组,每次保存target - nums[index]和index。
- 下次遍历时,如果在Map中找到了target - nums[index],就表示找到了两个数的和为target。
- 此时可以直接从Map中取出保存的index,与当前值的index组合则为结果。
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function (nums, target) {
// 用Map保存已遍历的index结果
let map = new Map();
for (let index = 0; index < nums.length; index++) {
// 判断当前值是否已在Map中存储,如果有就表示找到了两个数可以想加等于target
if (typeof map.get(nums[index]) === 'number') {
// 返回已保存的index和当前值的index
return [map.get(nums[index]), index];
}
// 将当前值与target的差,以及当前值的index保持在Map
// 当遍历到target - nums[index],就表示找到了两数之和为target,可以直接把当前的index取出
map.set(target - nums[index], index);
}
};