要求:给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]
解释: [4,9] 也是可通过的
题解1
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
function makeCountMap(nums){
let map = new Map()
for(let i = 0; i < nums.length; i++){
let count = map.get(nums[i])
if(count){
map.set(nums[i],count+1)
} else {
map.set(nums[i],1)
}
}
return map
}
var intersection = function(nums1, nums2) {
let map1 = makeCountMap(nums1)
let map2 = makeCountMap(nums2)
let res = []
for(let num of map1.keys()){
const count2 = map2.get(num)
if(count2){
res.push(num)
}
}
return res
};
官方题解:
const set_intersection = (set1, set2) => {
if(set1.size > set2.size){
return set_intersection(set2, set1)
}
const intersection = new Set()
for(const num of set1){
if(set2.has(num)){
intersection.add(num)
}
}
return [...intersection]
}
var intersection = function(num1, num2){
const set1 = new Set(num1)
const set2 = new Set(num2)
return set_intersection(set1, set2)
}