思路
集合(set)版本
nums1去重,遍历nums2对比
字典(map)版本
- 新建字典,遍历nums1填充字典
- 遍历nums2,字典中遇到就选出并删除
代码
set
return [...new Set(nums1)].filter(n => nums2.includes(n))
map
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function(nums1, nums2) {
const m = new Map()
nums1.forEach((item) => {
m.set(item,true)
})
const res = []
nums2.forEach((item) => {
if(m.get(item)){
res.push(item)
//需立即删除,防止后面重复使用
m.delete(item)
}
})
return res
};
复杂度
set
时间 : O(n^2) 空间 : O(1)
map
时间 : O(n) 空间 : O(n),因为字典最大值就是存储n个变量