# 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
  • 输出结果中的每个元素一定是唯一的
  • 我们可以不考虑输出结果的顺序

# 自己的答案

/**
 * @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

# 别人的答案


/**
 * @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
  • 两数组排序,指针分别从数组左端向右。如果数相等,放入结果集。哪边小,哪边指针右移
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