两个数组的交集

135 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

题目描述

给定两个数组 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] 也是可通过的
  • 示例3
输入: nums1 = [3,1,0,7,9], nums2 = [1,3]
输出: [1,3]
解释: [3,1] 也是可通过的

思路分析

  • 从题意知道,获取两个数组的交集,也就是要获取到两个数组共同存在的元素,但不需要考虑新数组里面元素的顺序。
  • 首先拿其中的一个数组循环遍历一次,新建一个对象,判断循环取到的值是不是等于对象的键,若是等于则可以不用忘对象里添加属性,若是不等于就添加一个。
  • 循环第二个数组,判断循环取到的值是否在对象里面(等于对象的键),若是有在对象里面,则可以吧该元素往新数组push,若是没有则不管它,直至循环结束,新数组就是我们想要的结果。

AC代码

let num = [1,3,0,7,9,0,7,2,0]
let num1 = [1,3,0]
function arrIntersection(num1, num2) {
    let obj = {};
    let res = [];
    num1.forEach( item => {
        if(!obj[item]) obj[item] = true;
    });
    num2.forEach( item => {
        if(obj[item]) {
            res.push(item);
            obj[item] = false;
        }
    });
    return res;
}
arrIntersection(num, num1);

总结

这是一个简单的运算,主要考察数组的对象的运用;复杂类型属于简单的;这道算法题还有很多种解法,这里只是给出了一个简单的解决方法(出自力扣)。