多个数组求交集

简介: 🎈每天进行一道算法题目练习,今天的题目是“多个数组求交集”。

说在前面

🎈每天进行一道算法题目练习,今天的题目是“多个数组求交集”。

问题描述

给你一个二维整数数组 nums ,其中 nums[i] 是由 不同 正整数组成的一个非空数组,按 升序排列 返回一个数组,数组中的每个元素在 nums 所有数组 中都出现过。

示例 1:

输入:nums = [[3,1,2,4,5],[1,2,3,4],[3,4,5,6]]
输出:[3,4]
解释:
nums[0] = [3,1,2,4,5],nums[1] = [1,2,3,4],nums[2] = [3,4,5,6],在 nums 中每个数组中都出现的数字是 3 和 4 ,所以返回 [3,4] 。

示例 2:

输入:nums = [[1,2,3],[4,5,6]]
输出:[]
解释:
不存在同时出现在 nums[0] 和 nums[1] 的整数,所以返回一个空列表 [] 。

提示:

1 <= nums.length <= 1000
1 <= sum(nums[i].length) <= 1000
1 <= nums[i][j] <= 1000
nums[i] 中的所有值 互不相同

思路分析

读完题目之后我们首先需要先知道什么是交集,交集是一个数学名词。集合论中,设AB是两个集合,由所有属于集合A 属于集合B的元素所组成的集合,叫做集合A与集合B交集(intersection),记作AB。\
如:集合 {1,2,3} 和 {2,3,4} 的交集为 {2,3}。即{1,2,3}∩{2,3,4}={2,3}。

image.png

代码来实现的话我们可以这样做:

  • 1 双重遍历求交集

先求第1、2个数组的交集,再求1、2数组交集和第三个数组的交集……直到遍历完整个数组即可得到多个数组的交集,代码如下:

let res = nums[0];
for(let i = 1; i < nums.length; i++){
    let temp = [];
    for(let j = 0; j < nums[i].length; j++){
        if(res.includes(nums[i][j])){
            temp.push(nums[i][j]);
        }
    }
res = [...temp];
}
  • 2 使用filter简化

我们可以使用filter来简化代码,使用一层循环加filter来求交集

let res = nums[0];
for (let i = 1; i < nums.length && ans.length; i++) {
    const temp = new Set(nums[i]);
    res = res.filter(c => temp.has(c));
}

最后要注意排个序
res.sort((a,b)=>{return a - b;});

AC代码

/**
 * @param {number[][]} nums
 * @return {number[]}
 */
var intersection = function(nums) {
    let res = nums[0];
    for(let i = 1; i < nums.length; i++){
        let temp = [];
        for(let j = 0; j < nums[i].length; j++){
            if(res.includes(nums[i][j])){
                temp.push(nums[i][j]);
            }
        }
        res = [...temp];
    }
    return res.sort((a,b)=>{return a - b;});
};

说在后面

🎉这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打打羽毛球🏸 ,平时也喜欢写些东西,既为自己记录📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解🙇,写错的地方望指出,定会认真改进😊,在此谢谢大家的支持,我们下文再见🙌。
目录
相关文章
|
8月前
|
Java C++ Python
leetcode-349:两个数组的交集
leetcode-349:两个数组的交集
57 1
【Leetcode -349.两个数组的交集 -350.两个数组的交集Ⅱ】
【Leetcode -349.两个数组的交集 -350.两个数组的交集Ⅱ】
43 0
|
3月前
|
C++
【LeetCode 12】349.两个数组的交集
【LeetCode 12】349.两个数组的交集
25 0
|
8月前
|
C++
两个数组的交集(C++)
两个数组的交集(C++)
51 0
|
8月前
|
C++
两个数组的交集 II(C++)
两个数组的交集 II(C++)
58 0
|
存储 数据处理 数据库
两个数组的交集(C++实现)
两个数组的交集(C++实现)
103 1
集合的交集、并集和差集
集合的交集、并集和差集
|
存储
LeetCode-两个数组的交集 II
LeetCode-两个数组的交集 II
两个数组的交集 II
两个数组的交集 II
71 0

热门文章

最新文章