多个数组求交集

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

说在前面

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

问题描述

给你一个二维整数数组 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,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打打羽毛球🏸 ,平时也喜欢写些东西,既为自己记录📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解🙇,写错的地方望指出,定会认真改进😊,在此谢谢大家的支持,我们下文再见🙌。
目录
相关文章
|
缓存 Java 容器
【Spring IOC容器加载过程】
【Spring IOC容器加载过程】
395 1
|
人工智能 弹性计算 边缘计算
2020年国内十大云计算商排名榜
云计算在中国经过数年发展后,技术和市场都越发成熟。随着性能和稳定的提高,成本的降低,个人和企业用户都开始逐步接受云服务,但无论在全球范围还是中国范围内,云计算市场还只是起步阶段。 中国云市场来看,表面看似巨头已经瓜分天下,但实际上,出色的新秀在不断涌现,利用自己的特色优势在细分市场中分一杯羹。笔者根据企业实力,产品性能、性价比、服务评价等方面选出了市场认可度高的中国十大公有云计算服务商云计算服务商。
|
4月前
|
人工智能 自然语言处理 安全
如何让 AI 工具更懂你,更听话?
你是否也曾被AI“气到吐血”?明明说的是A,AI却给了B?别沮丧,2025年的AI也需要“正确沟通”。本文教你五大提示技巧:动态提示、多模态输入、Few-shot示例、任务分解与安全边界,让AI从“人工智障”变身“贴心助手”。学会“说AI的语言”,释放创造力,提升效率,开启智能生活新时代!
1290 0
|
7月前
|
存储 人工智能 安全
【实测分享】本地AI工具AiPy更新版本v0.1.28
AiPy是一款出色的本地AI工具,2025年5月21日发布v0.1.28版本。它以本地化处理保障数据隐私,新增Trustoken联网搜索、云端私密存储等功能,支持多模型选择如阿里Qwen与腾讯Hunyuan,优化任务处理逻辑,提升效率。操作便捷升级,新老用户均可轻松上手。未来还将推出GUI客户端2.0等新功能,值得期待!(下载地址:https://www.aipyaipy.com/#download)快来体验吧!
【实测分享】本地AI工具AiPy更新版本v0.1.28
|
机器学习/深度学习 安全 5G
|
存储 缓存 程序员
C++内存管理:避免内存泄漏与性能优化的策略
C++内存管理涉及程序稳定性、可靠性和性能。理解堆和栈的区别至关重要,其中堆内存需手动分配和释放。避免内存泄漏的策略包括及时释放内存、使用智能指针和避免野指针。性能优化策略则包括减少内存分配、选用合适数据结构、避免深拷贝及缓存常用数据。通过这些最佳实践,可提升C++程序的效率和质量。
|
Linux 数据处理
Linux中的localectl命令:深入了解与应用
`localectl`是Linux中用于管理区域设置的`systemd`工具,涉及日期、时间、货币格式等。它通过修改配置文件调整系统本地化,并确保数据处理工具的正确运行。主要功能包括列出所有区域设置(`list-locales`)、设置主区域(如`set-locale LANG=en_US.UTF-8`)和查看当前状态。使用时注意理解区域设置差异,备份配置,测试设置效果,并保持系统一致性。查阅文档以获取更多操作详情。
|
存储 缓存 大数据
【大数据】分布式数据库HBase
【大数据】分布式数据库HBase
306 0
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的心理测评系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的心理测评系统附带文章和源代码部署视频讲解等
225 0
|
算法 安全 网络协议
一文搞懂SSL/TLS
一文搞懂SSL/TLS
1263 0
一文搞懂SSL/TLS