题1:两数之和
示例1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
解题思路:
-
创建一个map
-
for循环遍历nums数组
-
用target减nums[i](用来计算那个数字能跟减去的数字相加得到target)
-
检查map里有没有这个数,如果有则返回结果,如果没有则把num[i]当作key,i当作value放入map中。
**这样放的好处:**map.has()检查的key,把数字当key,也就是实际的value。
图解:
具体代码:
var twoSum = function (nums, target) {
const map = new Map()
for (let i = 0; i < nums.length; i++) {
const complement = target - nums[i]
if (map.has(complement)) {
return (map.get(complement), i)
} else {
map.set(nums[i], i)
}
}
return []
};
补充知识点:
1、map():
- Map是JavaScript中的数据结构,它允许存储[键,值]对,其中任何值都可以用作键或值。
- Map集合中的键和值可以是任何类型,并且如果使用集合中已存在的键将值添加到Map集合中,则新值将替换旧值。
- 映射对象中元素的迭代按插入顺序完成,并且“for…”循环为每次迭代返回所有[键,值]对的数组。
2、map.has():用于检查Map中是否存在具有指定键的元素。
3、map.get():获取指定key对应的value
4、map.set():
-
set()方法为
Map
对象添加或更新一个指定了键(key
)和值(value
)的(新)键值对。 -
**语法:**myMap.set(key, value);
-
参数:
key
要添加至相应
Map
对象的元素的键。value
要添加至相应
Map
对象的元素的值。 -
示例:
var myMap = new Map();
// 将一个新元素添加到 Map 对象
myMap.set("bar", "foo");
myMap.set(1, "foobar");
// 在Map对象中更新某个元素的值
myMap.set("bar", "baz");