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的长度