349-两个数组的交集
标签:数组 哈希表 双指针 二分查找 排序
题目信息
题目地址: 349. 两个数组的交集
题目内容:
javascript
给定两个数组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
题解
解法一
思路:
使用
Set
,将nums1
和nums2
元素放入Set
中,生成n1Set
和n2Set
,然后遍历n1Set
,如果n1Set
中的元素在n2Set
中存在,则放入结果数组中
代码实现:
javascript
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function(nums1, nums2) {
const n1Set = new Set(nums1)
const n2Set = new Set(nums2)
const res = []
;[...n1Set].forEach(item => {
if(n2Set.has(item)) {
res.push(item)
}
})
return res
};
解法二
思路:
使用
Map
,先将num1中的元素放入map
中并去重,然后遍历num2,如果num2中的元素在map
中存在,则放入结果数组中,并删除map
中的元素
代码实现:
javascript
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function(nums1, nums2) {
const n1Map = new Map()
nums1.forEach(item => {
!n1Map.has(item) && n1Map.set(item, true)
})
const res = []
nums2.forEach(item => {
if(n1Map.has(item)) {
res.push(item)
n1Map.delete(item)
}
})
return res
};