题目
给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]
思路
我们使用集合 Set和字典 Map 2种方式
1.集合
var intersection = function(nums1, nums2) {
const nums1Set= [...new Set(nums1)]
return nums1Set.filter(item=>nums2.includes(item))
};
时间复杂度:里面有一个filter循环,同时还进行了includes操作,两个时间复杂度都是O(n),也就是一个嵌套 所以时间复杂度是 O (m*n)m就是去重后数组的长度,n是nums2的长度
空间复杂度:nums1 nums2都是已有的存储 额外的就是这个去重后的nums1这个数组O(m)m就是去重后数组的长度
2.字典
var intersection = function(nums1, nums2) {
const map1=new Map([])
nums1.forEach(item=>map1.set(item,true))
const res = []
nums2.forEach(item=>{
if(map1.get(item)){
res.push(item)
map1.delete() //找到了就删除,避免nums2重复的数据再匹配
}
})
return res
};
时间复杂度:我们有两个没有嵌套的循环 所以就是nums1.length+nums2.length O(m+n)
空间复杂度:O(m) nums1.length = m,字典最差的情况下可能存储m个变量