题目链接
https://leetcode.cn/problems/two-sum/description/
题目截图
题目代码
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
const twoSum = function (nums, target) {
const map = new Map();// 新建map
for (let i = 0; i < nums.length; i++) {
if (map.has(target - nums[i])) { // 目标值 - 当前值 = 当前距离目标的差值,如果这个差值存在于map里面
return [map.get(target - nums[i]), i];// 读取他的下标和本次的下标
}
map.set(nums[i], i);//没有找到则把本次的值作为key,下标作为值存到map中
}
return [];
};
理解
由题可知,主要是要从nums这个数组中找两个加起来等于taeget的数,且都是整数。
首先声明twoSum函数使用形参nums以及target接收指定的数据。
在函数一执行,便声明一个map用来存储数组中的值和下标,其中数组元素的值做为map的key,下标作为map的值。
已知
target 是需要找的值
nums[i] 是每次循环的数组元素值
target-nums[i] 是每次循环的数组元素值与目标值target之间的差
这个差需要在数组当中找,而数组中的值最后都会存到map中。
循环中判断 map.has(target - nums[i]) map中有没有一个值是等于target-nums[i] 的值,有的话就是当前循环的数组元素值,和map中key等于差的元素可以满足题目要求,将当前的i和map中key存储的值,也就是另一个数组下标进行返回。
如果没有找到,则进行下一次循环,循环结束没有找到则是数组中没有条件符合的。