每日一题: 两数之和
题目:
给定一个整数数组 `nums` 和一个整数目标值 `target`,请你在该数组中找出 和为目标值 `target` 的那 两个 整数,并返回它们的数组下标。
数组中只有一对数据满足要求。
数组中的数据不能在答案中重复使用。
不限制答案中数组下标的顺序。
示例:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
代码:
var twoSum = function(nums, target) {
// 键为 配对值 值为下标
let numMap = new Map();
// Map是特殊的键值对结构 雷同对象
let res = new Array(2);
for(let index in nums){
let item = nums[index];
if(numMap.has(item)){
res = [numMap.get(item), index];
break;
}else {
numMap.set(target - item, index);
}
}
return res;
};
代码解析:
- 遍历数组nums,取到每一项的坐标和值。
- 如果map中没有该项值,则记录一个键值对到map结构中,键为目标值减当前值,值为当前引用。这样键值对中就记录了遍历过的所有下标和该下标下对应需要的值。
- 如果map中存在该值,则说明本项可以与map中值对应的下标项相加构成结果值。
- 输出map中对应下标,当前下标即可。
运行解析:
// [3,2,4] 6
循环项: 0 3 map: Map(1) { 3 => '0' }
循环项: 1 2 map: Map(2) { 3 => '0', 4 => '1' }
循环项: 2 4 map: Map(2) { 3 => '0', 4 => '1' } 结果 [ '1', '2' ]