给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
var twoSum = function(nums, target) {
var map = new Map(); // 这里使用散列,也就是哈希表来做可以降低时间复杂度
for (let i = 0;i<nums.length; i++) {
let a = nums[i]-target/2; // 要使两数之和为目标值,需要他们的平均数为目标值一半,及数组中的数据与目标值target相差结果为一对相反数时,两者之和为target
if (map.has(-a)) { // 以差值为键值加入散列,如果散列中存在该键值的相反数,既可相加得到target,取出两者的数组索引即可
return [map.get(-a), i];
} else {
map.set(a, i); // 如果不存在相反数,则以此差值为键名,数组索引为键值存入
}
}
};