LeetCode:349. 两个数组的交集

89 阅读1分钟

题目

给定两个数组 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个变量