两个数组的交集
一、题目
给定两个数组 nums1
和 nums2
,返回 它们的交集 。输出结果中的每个元素一定是 唯一
的。我们可以 不考虑输出结果的顺序
。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的
提示:
- 1 <= nums1.length, nums2.length <= 1000
- 0 <= nums1[i], nums2[i] <= 1000
二、题解
方法一(用集合)
步骤
- 用集合对nums1去重
- 再遍历nums1,筛选出nums2也包含的值
- 不要忘记最后的返回结果是个
数组
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function(nums1, nums2) {
return [...new Set(nums1.filter(item => nums2.includes(item)))]
};
方法二(用字典)
步骤
- 新建一个字典,遍历nums1,填充字典
- 遍历nums2,遇到字典里的值就选出,并从字典中删除(防止重复值)
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function(nums1, nums2) {
let map = new Map();
nums1.forEach(item => map.set(item, true))
return nums2.filter(item => {
return map.get(item) && map.delete(item)
} )
};
三、拓展
如何将集合转换为普通数组?
var set = new Set([2, 3])
// ES2015
const args = Array.from(set);
const args = [...set];