【Leetcode】349. 两个数组的交集

news2024/11/28 2:53:55

题意

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

说明: 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。 

思路

        这道题目,主要要学会使用一种哈希数据结构:unordered_set,这个数据结构可以解决很多类似的问题。

        注意题目特意说明:输出结果中的每个元素一定是唯一的,也就是说输出的结果的去重的, 同时可以不考虑输出结果的顺序

        这道题用暴力的解法时间复杂度是O(n^2),那来看看使用哈希法进一步优化。

        那么用数组来做哈希表也是不错的选择,但是要注意,使用数组来做哈希的题目,是因为题目都限制了数值的大小。

        而这道题目没有限制数值的大小,就无法使用数组来做哈希表了。

        而且如果哈希值比较少、特别分散、跨度非常大,使用数组就造成空间的极大浪费。

        此时就要使用另一种结构体了,set ,关于set,C++ 给提供了如下三种可用的数据结构:

  • std::set
  • std::multiset
  • std::unordered_set

std::set和std::multiset底层实现都是红黑树,
std::unordered_set的底层实现是哈希表,
使用unordered_set 读写效率是最高的,并不需要对数据进行排序,而且还不要让数据重复,所以选择unordered_set。

思路如图所示:

拓展

那有同学可能问了,遇到哈希问题我直接都用set不就得了,用什么数组啊。

直接使用set 不仅占用空间比数组大,而且速度要比数组慢,set把数值映射到key上都要做hash计算的。

不要小瞧 这个耗时,在数据量大的情况,差距是很明显的。

class Solution(object):
    def intersection(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: List[int]
        """
        # 使用哈希表存储一个数组中的所有元素
        table = {}
        for num in nums1:
            table[num] = table.get(num, 0) + 1
        
        # 使用集合存储结果
        res = set()
        for num in nums2:
            if num in table:
                res.add(num)
                del table[num]
        
        return list(res)

table.get(num, 0) 表示获取键 num 对应的值,如果 num 存在则返回其值,否则返回 0。

 

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

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

相关文章

供应链云仓系统:实现采购、销售、收银、路线规划一体化,高效协同,再创商业价值!

供应链云仓系统是一款集合采购、销售、收银、路线规划等多项功能的软件系统,旨在帮助企业实现业务流程的全面自动化和协同化。通过该系统,企业可以轻松管理供应链的各个环节,提高运营效率,降低成本,实现商业价值的最大…

标讯通:无代码开发连接API,为广告推广与客服系统集成新商机

无代码开发连接API的新趋势——标讯通 招投标已成为大多数企业获取业务的主要途径之一。然而,由于招标信息平台分散,平台发布的招标信息更是有数十万条,单纯依赖人工查询,往往过程繁琐,效率低下。在这样的背景下&…

java智能在线考试系统源码 基于SpringBoot+Vue开发

java智能在线考试系统源码 基于SpringBootVue开发 环境介绍 语言环境:Java: jdk1.8 数据库:Mysql: mysql5.7 应用服务器:Tomcat: tomcat8.5.31 开发工具:IDEA或eclipse 开发技术:SpringbootVue 项目简介&…

再也不愁了!有了它在家也能轻松制作个人作品

​在家就能轻松制作个人作品,这不仅节省了时间和精力,还降低了成本。无论你是想要制作一个短片、设计一款App、还是写一篇文章,这个网站都能提供专业的支持和帮助。 1.在浏览器搜索FLBOOK在线制作电子杂志平台,点击登录与注册 2.点…

CV计算机视觉每日开源代码Paper with code速览-2023.11.2

精华置顶 墙裂推荐!小白如何1个月系统学习CV核心知识:链接 点击CV计算机视觉,关注更多CV干货 论文已打包,点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【目标检测】Re-Scoring Using Image-Language Similarit…

ubuntu20.04 安装cudnn

中文地址是.cn:cuDNN 历史版本 | NVIDIA 开发者 英文地址是.com:cuDNN 历史版本 | NVIDIA 开发者 1、下载cudnn:cudnn-local-repo-ubuntu2004-8.8.1.3_1.0-1_amd64.deb 解压并安装:sudo dpkg -i cudnn-local-repo-ubuntu2004-8.8…

配件管理系统软件哪家好?如何优化企业设备管理,提高运营效率?

随着企业运营的日益复杂化,设备的维修维护与管理已成为企业生产运营中的重要环节。在这个过程中,配件的管理往往成为一项极具挑战性的任务。如何有效地管理备用的配件,缩短维修的时间,同时防止库存积压,是许多企业目前…

有什么好用的CRM客户管理系统?推荐这5大高口碑的CRM系统!

有什么好用的CRM客户管理系统?推荐这5大高口碑的CRM系统! 好用的CRM客户管理系统: ①需要进行精细化管理 ②需要专业的管理工具 ③最好能够做到和erp系统和oa系统的集成 授人以鱼不如授人以渔,在给题主推荐crm系统之前&#…

Java前后端分离的在线考试系统源码

Java前后端分离的在线考试系统源码 技术栈 1,SpringBoot 2,Mybatis-plus 3,MySQL 5.7 4,Vue全家桶 5,ElementUI 6,Redis 7,Swagger 8,阿里云OSS 9,Log4j 考…

Linux网络编程04

更高效的零拷贝 发送方过程零拷贝 sendfile 发送文件方的零拷贝,虽然之前我们就可以使用mmap来实现零拷贝但是存在一个方法sendfile也可以直接实现数据从内核区发送到网络发送区socket 直接把内核里面你的文件数据不经过用户态,直接发送给另外一个文件…

成集云 | 电商平台、ERP、WMS集成 | 解决方案

电商平台ERPWMS 方案介绍 电商平台即是一个为企业或个人提供网上交易洽谈的平台。企业电子商务平台是建立在Internet网上进行商务活动的虚拟网络空间和保障商务顺利运营的管理环境;是协调、整合信息流、货物流、资金流有序、关联、高效流动的重要场所。企业、商家…

多功能声学综合馆:空间的“膜法师”

建筑是文明的承载者,是历史的见证者,也是城市的象征。但在现代都市中,我们不仅需要“固定”的建筑,更需要灵活与多功能性的空间。而这,正是多功能声学综合馆为我们带来的“膜法”。 不仅仅是建筑,更是艺术的…

盘点13种即插即用的涨点模块,含注意力机制、卷积变体、Transformer变体

朋友们,你们想发paper的时候有没有被创新点、改模型、改代码折磨过?今天我教你们一个前期又快又省事的方法,就是用即插即用的模块“缝合”,加入自己的想法快速搭积木炼丹。 这种方法可以简化模型设计,减少冗余工作&am…

AI技术再刷屏!明星集体“说”外语,有何风险?

近日,一段美国歌手泰勒斯威夫特“说”中文的短视频在网络刷屏,引发热议。 视频中,泰勒斯威夫特“说”着流利中文,音色和讲母语时的音色类似,甚至连口型都能对上。 类似的视频还有很多外国人“说”地道中文、很多中国…

智慧班牌系统全套解决方案 智慧校园云平台

随着智能的不断发展,学校也有了更多智能化的应用,传统教育信息化水平低、校园和班级文化建设、日常教学管理缺少有力的数字抓手,家校通缺乏渠道,无法及时掌握孩子在校情况,学校教育和家庭教育出现断层,存在…

如何本地搭建SeaFile私有云盘并实现远程连接

文章目录 1. 前言2. SeaFile云盘设置2.1 Owncould的安装环境设置2.2 SeaFile下载安装2.3 SeaFile的配置 3. cpolar内网穿透3.1 Cpolar下载安装3.2 Cpolar的注册3.3 Cpolar云端设置3.4 Cpolar本地设置 4.公网访问测试5.结语 1. 前言 现在我们身边的只能设备越来越多&#xff0c…

剑指JUC原理-13.线程池

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码🔥如果感觉博主的文章还不错的话,请👍三连支持&…

【NI-DAQmx入门】NI-DAQmx之MATLAB/SIMULINK支持

Data Acquisition Toolbox™ 提供用于配置数据采集硬件、将数据读入 MATLAB 和 Simulink 以及将数据写入 DAQ 模拟和数字输出通道的应用程序和函数。该工具箱支持多种 DAQ 硬件,包括来自 National Instruments™ 和其他供应商的 USB、PCI、PCI Express 、PXI 和 PXI…

Verilog使用vscode

使用vscode打开.v文件 Tools setting texteditor vscode文件路径 [line number]:[file name] 安装插件 搜索Verilog 添加使用最多的 添加自动纠错动能,将vivado自带的语法纠错工具添加到环境变量中 完成后命令行检测是否成功 vscode扩展中修改 还可添加

分模块设计与开发

一,分析(在项目开始时就要确认好每个模块的功能) 将一个大型项目拆分成几个模块每个模块分别开发将组件中的实体类和工具类拆分出来方便复用优点:方便维护扩展;也方便模块之间的相互调用资源共享 二,怎么实…