两数之和:哈希表解题
给你一组数字和一个目标值,得在数字里找出俩相加等于目标值的,并报出它们的位置。
示例:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
function sum(arr, target) {
let mapArr = new Map();
for (let i = 0; i < arr.length; i++) {
let num = target - arr[i];
if (mapArr.has(num)) {
return [mapArr.get(num), i];
}
mapArr.set(arr[i], i);
}
return [];
}
数组交集 II:依旧哈希表
找出两个给定数组的交集,不过这里的交集有特殊要求:输出结果中每个元素出现的次数,要和该元素在两个数组中出现次数的最小值一致。并且不需要考虑输出结果的顺序。
示例:
输入: nums1 = [1, 2, 2, 1], nums2 = [2, 2]
输出: [2, 2]
function intersect(nums1, nums2) {
const map = new Map();
for (let num of nums1) {
if (map.has(num)) {
map.set(num, map.get(num) + 1);
} else {
map.set(num, 1);
}
}
const result = [];
for (let num of nums2) {
if (map.has(num) && map.get(num) > 0) {
result.push(num);
map.set(num, map.get(num) - 1);
}
}
return result;
}
在上述代码中,我们先把第一个数组中每个元素的出现次数记在哈希表里,然后遍历第二个数组,找到相同元素就把它拉进结果队伍,同时减少 “账本” 里队员的计数。这样就能精准找出交集,是不是很机智?今天先到这吧~