题目

点击前往

给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

示例 1:

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

示例 2:

1
2
3
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的

解题思路

方法一:

  • 利用哈希表,存储nums1中的值。
  • 遍历nums2,如果哈希表中含有这个值,则将其存在result中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function(nums1, nums2) {
let hashmap = new Map();
let result = new Array();
nums1.forEach(e=>{
hashmap.set(e,(hashmap.get(e) || 0) + 1);
})
nums2.forEach(e=>{
if(hashmap.has(e)){
if(result.indexOf(e) < 0){
result.push(e);
}
}
})
return result;
};

方法二:

  • 利用Set数据类型的特点,将两个数组转为Set。
  • 遍历nums2,如果set1中含有这个值,则将其存在result中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function(nums1, nums2) {
let set1 = new Set(nums1);
let set2 = new Set(nums2);
let result = new Array();
set2.forEach( e =>{
if(set1.has(e)){
result.push(e);
}
})
return result;
};