两个数组的交集|刷题打卡

137 阅读1分钟

一、题目描述

给定两个数组,编写一个函数来计算它们的交集。

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

二、思路分析

这道题看上去不是特别难,但是我们可以尝试用多个方法去尝试做

第一种方法 我们通过多声明一个对象,帮助我们存放我们第一次循环过num1的元素,然后通过这个对象,帮助我们判断,num2中与num1中元素的交集关系。

第二种方法类似于双指针法,这个方法需要我们去给两个数组进行排序,然后我们去声明两个指针,同时走,因为我们已经排序过了,就可以通过右移找到交集

三、AC代码



const intersection = (nums1, nums2) => {
    const map = {};
    const res = [];
  
    for (const num1 of nums1) {
      map[num1] = true; // 记录nums1出现过的数字
    }
    for (const num2 of nums2) {
      if (map[num2]) {  // 如果nums2的这个数字在nums1出现过
        map[num2] = false; // 置为false,避免重复推入res
        res.push(num2);  // 交集数字推入res
      }
    }
    return res;
  };

// 双指针法
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
};

四、总结

当我们可以比较轻松的去对一道题解出来之后,我们就可以多想一想,有没有更好的方法,让我们不断加强我们的算法能力吧!