154-data_structure-14-map~349两个数组的交集

154-data_structure-14-map~349两个数组的交集

概述

给定两个数组,编写一个函数来计算它们的交集。

说明:

  • 输出结果中的每个元素一定是唯一的。
  • 我们可以不考虑输出结果的顺序。

测试

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]

解题思路

求nums1和nums2都有的值

用字典建立一个映射关系,记录nums1里有的值

遍历nums2,找出nums1里也有的值

解题步骤

新建一个字典,遍历nums1,填充字典

遍历nums2,遇到字典里的值就选出,并从字典中删除

代码

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
 var intersection = function(nums1, nums2) {
  const map = new Map()
  const res = []
  nums1.forEach(n => {
    map.set(n, true)
  })
  nums2.forEach(n => {
    if ( map.get(n) ) {
      res.push(n)
      map.delete(n)
    }
  })
  return res
};

复杂度

  • 时间复杂度:O(m + n),m为nums1的长度,n为nums2的长度
  • 空间复杂度:O(m),m为临时存储map的长度