350. 两个数组的交集 II
描述
给定两个数组,编写一个函数来计算它们的交集。
说明
- 输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。
- 我们可以不考虑输出结果的顺序。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]
思路
- 使用 Hash Map 解决,属于利用哈希表计数的问题。
- 将 nums1 构造成 Hash Map ;key 是数组中的某个数,value 是对应数字在数组中出现的频次。
- 遍历 nums2 ,查找对应项在 Hash Map 中是否存在 且 计数频次大于0;若存在,则将该项添加到记录重复项的数组 arr 中,并且将 Hash Map 中的对应计数频次 减一。
代码
let intersect = function(nums1, nums2) {
let arr = []
let map1 = new Map()
nums1.forEach(item => {
if(map1.get(item) === undefined){
map1.set(item,1)
}else {
map1.set(item,map1.get(item)+1)
}
})
nums2.forEach(item =>{
if(map1.get(item) !== undefined && map1.get(item) > 0){
map1.set(item,map1.get(item)-1)
arr.push(item)
}
})
return arr
};
总结
- 属于利用哈希表计数的问题。