一般思路是双层循环,但是这样时间复杂度太高了,所以我们一般都要反思可不可以改成一层循环。
用空间换时间,采用Map。而且一般求和问题我们都转化为求差问题。所以我们遍历数组,把值当做key,把索引当做value,每次比较看target - nums[i]是否已经存在,存在则返回答案
var twoSum = function(nums, target) {
const map = new Map();
const len = nums.length;
for (let i = 0; i < len; i++) {
if(map.has(target - nums[i])){
return [map.get(target-nums[i]),i];
}
map.set(nums[i],i)
}
};