leetcode350. 两个数组的交集 II,哈希表

news2024/11/16 0:52:09

leetcode350. 两个数组的交集 II

给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。

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

示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]

提示:
1 <= nums1.length, nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 1000
在这里插入图片描述

题目分析

题目描述

给定两个整数数组 nums1nums2,返回两个数组的交集。输出结果中的每个元素出现的次数,应与元素在两个数组中出现的次数一致。

算法分析

这个问题可以通过哈希表(无序映射)来解决。我们使用两个哈希表(p1p2)来存储两个数组中每个元素的出现次数。然后,我们遍历第一个哈希表,对于每个元素,如果它在第二个哈希表中也存在,则计算两个哈希表中该元素出现次数的最小值,并将其添加到结果数组中。

算法步骤

  1. 初始化两个哈希表 p1p2
  2. 遍历数组 nums1,将每个元素及其出现次数存储在 p1 中。
  3. 遍历数组 nums2,将每个元素及其出现次数存储在 p2 中。
  4. 初始化一个空向量 res 来存储结果。
  5. 遍历 p1,对于每个元素 k
    • 如果 p2 中包含 k,则找到 p2k 的位置。
    • 计算 p1k 的出现次数和 p2k 的出现次数的最小值。
    • k 添加到 res 中,次数为最小值。
  6. 返回 res

算法流程

开始
初始化无序映射 p1 和 p2
遍历 nums1
存储 nums1 元素在 p1
遍历 nums2
存储 nums2 元素在 p2
初始化空向量 res
遍历 p1
检查 p2 中是否包含 k
找到 p2 中 k 的位置
计算 p1 中 k 的出现次数和 p2 中 k 的出现次数的最小值
将 k 添加到 res 中 次数为最小值
返回 res
结束

具体代码

class Solution {
public:
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
    unordered_map<int,int> p1;
    unordered_map<int,int> p2;
    for(int i=0;i<nums1.size();i++)
    {
       p1[nums1[i]]++;
    }
    for(int i=0;i<nums2.size();i++)
    {
       p2[nums2[i]]++;
    }
    vector<int> res;
    for(auto k:p1)
    {
        if(p2.count(k.first))
        {
            auto t=p2.find(k.first);
            int p1size=k.second;
            int p2size=t->second;  
            int size=min(p1size,p2size);
            for(int j=0;j<size;j++)
            {
                res.push_back(k.first);
            }
        }
    }
    return res;
    }
};

算法分析

复杂度分析

  • 时间复杂度:O(m+n),其中 m 和 n 分别是两个数组的长度。我们只需要遍历两个数组一次。
  • 空间复杂度:O(m+n),我们需要存储两个数组的元素及其出现次数,这取决于数组的长度。

易错点

  • 在初始化两个无序映射时,确保正确地存储每个元素及其出现的次数。
  • 在比较两个映射中的元素时,确保正确地使用 count 函数。
  • 在计算最小出现次数时,确保正确地使用 min 函数。

注意事项

  • 确保在遍历数组时不要超出数组的边界。
  • 在处理映射时,确保不会覆盖任何元素。

相似题目

题目链接
两个数组的交集 IIhttps://leetcode.com/problems/intersection-of-two-arrays-ii/
数组交集https://leetcode.com/problems/intersection-of-two-arrays/
查找重复的子树https://leetcode.com/problems/find-duplicate-subtrees/
两数之和https://leetcode.com/problems/two-sum/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2046770.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

导出word格式的Javadoc(可用于快速生成项目详细设计文档)

导出word格式的Javadoc ​ 最近要编写项目详细设计文档&#xff0c;作为程序员当然想看看有没有能够自动生成的办法&#xff0c;生成详细设计文档&#xff0c;然后再在生成的基础上略做修改就好了&#xff08;偷懒大法~&#xff09;&#xff0c;还真有&#xff0c;特此分享&am…

数字乡村+智慧农业数字化转型大数据平台建设方案

1. 数字农业发展趋势 数字农业正经历全环节数字技术应用、全流程生产经营再造、全方位线上线下对接和管理服务全生命周期覆盖的四大趋势&#xff0c;标志着我国农业进入高质量发展新阶段。 2. 数字乡村的战略意义 数字乡村作为数字化、网络化和信息化的产物&#xff0c;对于…

人工智能技术工程师由谁颁发?都学习哪些课程?

人工智能技术工程师是一个充满挑战和机遇的职业。他们将用自己的专业知识和技能&#xff0c;为人类带来更加美好的未来。 一、人工智能工程师发证单位是谁&#xff1f; 人工智能技术工程师证书是由工业和信息化部教育与考试中心颁发的。 工信部电子标准院的人工智能从业人员认…

基于飞腾平台的Hadoop的安装配置

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

旅游卡真伪一招辨别,避免旅行陷阱!

揭秘旅游卡真伪&#xff01;一招教你识别隐藏陷阱&#xff0c;避免旅行大坑&#xff01; 对于热爱旅行的朋友们来说&#xff0c;旅游卡无疑是一种方便又实惠的选择。 然而&#xff0c;随着市场上的旅游卡种类越来越多&#xff0c;如何选择一张真实有效的旅游卡成为了大家关注…

CI/CD 自动化:最大限度地提高极狐GitLab 群组的“部署冻结”影响

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…

矩阵获客时代,如何有效管理云微客短视频矩阵?

随着短视频内容数量的快速增长&#xff0c;一站式、高效、智能化的矩阵管理模式&#xff0c;正逐渐受到各个行业的关注和喜爱。那么该如何有效地管理短视频矩阵&#xff0c;确保内容的高质量、高效率和准确投放呢&#xff1f; 当今数字化时代&#xff0c;短视频已经成为了一种极…

Oracle 用户-表空间-表之间关系常用SQL

问题&#xff1a; 当某一个表数据量特别大&#xff0c;突然插入数据一直失败&#xff0c;可能是表空间不足&#xff0c;需要查看表的使用率 用户-表空间-表之间关系&#xff1a;用户可以有多个表空间&#xff0c;表空间可以有多个表&#xff0c;表只能拥有一个表空间和用户 1.…

联邦学习:破解农业大数据共享的安全难题

&#xff08; 于景鑫 国家农业信息化工程技术研究中心 &#xff09;农业大数据是农业智能化的基石,其共享与开放是发掘数据价值、驱动农业变革的关键。然而,数据隐私与安全问题如同数据共享之路上的一道坎,牵制着农业大数据的流动与融合。联邦学习作为一种颠覆性的分布式机器学…

1Panel应用推荐:Bytebase开源数据库DevOps解决方案

1Panel&#xff08;github.com/1Panel-dev/1Panel&#xff09;是一款现代化、开源的Linux服务器运维管理面板&#xff0c;它致力于通过开源的方式&#xff0c;帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用&#xff0c;1Panel特别开通应用商店&am…

技术爱好者完全用台式机部件定制游戏笔记本电脑

高端笔记本电脑的功能强大到令人难以置信的地步&#xff0c;但大多数笔记本电脑在至少几个关键性能方面仍然落后于台式机。一位 YouTuber 对这种情况感到厌倦&#xff0c;为了抹除这种差距&#xff0c;他开始了为期 14 个月的旅程&#xff0c;使用真正的台式机硬件打造自己的笔…

基于R语言遥感随机森林建模与空间预测;遥感数据处理与特征提取;数据分析与可视化

目录 第一章 理论基础与数据准备【夯实基础】 第二章 随机森林建模与预测【讲解实践】 第三章 实践案例与项目 更多应用 随机森林作为一种集成学习方法&#xff0c;在处理复杂数据分析任务中特别是遥感数据分析中表现出色。通过构建大量的决策树并引入随机性&#xff0c;随…

ubuntu 24.04 软件源配置,替换为国内源

ubuntu 默认的官网源下载速度非常慢&#xff0c;新装 ubuntu 系统首先把 apt 软件源替换成国内源。 1、使用软件和更新设置国内源 打开软件和更新&#xff0c;选择位于中国的服务器&#xff1a; 外链图片转存失败&#xff0c;源站可能有防盗链机制&#xff0c;建议将图片保存…

JavaEE 第11节 定时器

前言 本篇博客重点介绍定时器的简单实现&#xff0c;帮助理解其底层原理。关于JAVA工具类自带的定时器&#xff0c;只会简单介绍&#xff0c;详细使用参阅官方文档&#xff08;下文中有官方文档的连接&#xff09;。 一、什么是定时器 定时器的概念非常简单。 它在软件开发…

Umi-OCR 图片文字智能识别软件,不需联网,Linux 下运行错误修复,AI 识文一文搞定!

Umi-OCR 图片文字智能识别软件&#xff0c;不需联网&#xff0c;Linux 下运行除错修复&#xff0c;AI 识文一文搞定&#xff01; Umi-OCR 是一款开源的图片文字只能识别软件&#xff0c;支持多国语言识别&#xff0c;支持截图OCR / 批量OCR / PDF识别 / 二维码 / 公式识别。 …

C:数组传参的本质

1、一维数组传参的本质 数组传参是指在函数调用时将数组作为参数传递给函数。 int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };test(arr);return 0;}数组传参只需要写数组名就可以了。注意&#xff1a;数组名是arr&#xff0c;而不是arr[10] 数组传参形参该怎么写呢&am…

Linux git安装与部署

目录 git安装 1、下载与安装 2、配置git账号信息 创建本地仓库 1、创建本地代码库文件夹 2、创建项目代码本地仓库文件夹 3、进入到projCode目录下&#xff0c;创建git本地仓库 4、创建过滤文件.gitignore 5、添加.gitignore到git暂存区 6、提交.gitignore 7、将项目…

Spring Boot集成钉钉群通知机器人

文章目录 一、钉钉机器人配置1&#xff09;添加机器人2&#xff09;添加自定义机器人3&#xff09;设置机器人参数4&#xff09;添加机器人完成 二、依赖导入三、工具类封装四、关键字推送消息测试类1&#xff09;测试类2&#xff09;程序输出结果&#xff1a;3&#xff09;通知…

基于模糊神经网络的金融序列预测算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于模糊神经网络的金融序列预测算法matlab仿真,根据序列的MAD,RSI,KD等指标实现序列的预测和最终收益分析。 2.测试软件版本以及运行结果展示 MATLAB2022A版本…

使用Go语言将PDF文件转换为Base64编码

使用 Go 语言将 Base64 编码转换为 PDF 文件-CSDN博客本文介绍了如何使用 Go 语言将 Base64 编码转换为 PDF 文件&#xff0c;并保存到指定路径。https://blog.csdn.net/qq_45519030/article/details/141225772 在现代编程中&#xff0c;数据转换和编码是常见的需求。本文将介绍…