# 349.两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。
# 示例
输入:nums=[1,2,2,1], nums2=[2,2]
输出;[2]
输入:nums1 = [4,9,5], nums=[9,4,9,8,4]
输出:[9,4]
1
2
3
4
5
2
3
4
5
- 输出结果中的每个元素一定是唯一的
- 我们可以不考虑输出结果的顺序
# 自己的答案
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function(nums1, nums2) {
if(nums1.length ===0 || nums2.length === 0) return [];
let newNums1 = deleteSame(nums1);
let newNums2 = deleteSame(nums2);
let result = [];
for(let j =0;j<newNums2.length;j++) {
if(newNums1.indexOf(newNums2[j]) > -1) {
result.push(newNums2[j])
}
}
return result;
};
var deleteSame = function(num) {
let newArr = [];
let newMap = new Map()
for(let i in num) {
if(newMap.has(num[i])) {
newMap.set(num[i], true)
} else {
newMap.set(num[i], false)
newArr.push(num[i])
}
}
return newArr;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 别人的答案
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function(nums1, nums2) {
let arr = [];
for(let i = 0; i < nums1.length; i++) {
if (nums2.includes(nums1[i])) {
arr.push(nums1[i]);
}
}
return Array.from(new Set(arr))
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- 两数组排序,指针分别从数组左端向右。如果数相等,放入结果集。哪边小,哪边指针右移
var intersection = function(nums1, nums2, p1 = 0, p2 = 0, r = []) {
nums1.sort((a, b) => a - b)
nums2.sort((a, b) => a - b)
while (p1 < nums1.length && p2 < nums2.length)
if (nums1[p1] === nums2[p2]) r[r.length - 1] !== nums1[p1] && r.push(nums1[p1]), p1++, p2++
else if (nums1[p1] < nums2[p2]) p1++
else p2++
return r
};
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9