349.俩数组交集

78 阅读1分钟

思路

集合(set)版本

nums1去重,遍历nums2对比

字典(map)版本

  1. 新建字典,遍历nums1填充字典
  2. 遍历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个变量