两个数组的交集(力扣刷题)
给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/intersection-of-two-arrays
说明: 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。
思路
这道题目,主要要学会使用一种哈希数据结构: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。
思路如图所示:

当然本题也有数组法,一样放在下面。
C++代码如下:
class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {//set法// unordered_set<int> result_set;// unordered_set<int> nums_set(nums1.begin(),nums1.end());// for(int num : nums2)// {// if(nums_set.find(num) != nums_set.end())// {// result_set.insert(num);// }// }// return vector<int>(result_set.begin(),result_set.end());//数组法unordered_set<int> result_set;int hash[1005] = {0};for(int num : nums1){hash[num] = 1;}for(int num : nums2){if(hash[num] == 1){result_set.insert(num);}}return vector<int>(result_set.begin(),result_set.end());}
};相关文章:
两个数组的交集(力扣刷题)
给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/intersection-of-two-arrays 说…...
SonarQube 10.0 (macOS, Linux, Windows) - 清洁代码 (Clean Code)
请访问原文链接:https://sysin.org/blog/sonarqube-10/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org Sonar Clean Code Industry leading solutions IDE | SonarLint Free IDE extension that provides on-the-f…...
怎么统一把文件名不需要部分批量替换掉
同事把文件传给我,我接在电脑上看发现文件名都是乱的,前面都加了一串挺长的数字,总之看起来很乱,顺序也跟着乱了,如何把红色框内部分删除掉呢? 上图就是我收到同事发我文件呢,你说要什么修改呢&…...
Vue3电商项目实战-结算支付 3【05-结算-收货地址-添加、06-结算-收货地址-修改、07-结算-提交订单】
文章目录05-结算-收货地址-添加06-结算-收货地址-修改07-结算-提交订单05-结算-收货地址-添加 目的:实现收货地址的添加。 大致步骤: 独立组件,准备一个对话框完成表单布局完成确认添加操作 落的代码: 1.独立组件,准…...
开心档之开发入门网-C++ 变量作用域
C 变量作用域 目录 C 变量作用域 局部变量 实例 全局变量 实例 实例 初始化局部变量和全局变量 作用域是程序的一个区域,一般来说有三个地方可以定义变量: 在函数或一个代码块内部声明的变量,称为局部变量。 在函数参数的定义中声明…...
蓝易云:linux怎么关闭防火墙详细教程
在Linux下关闭防火墙可以通过以下步骤实现: 1. 检查防火墙状态 首先需要检查当前系统的防火墙状态,可以使用以下命令: sudo systemctl status firewalld 如果防火墙当前正在运行,会显示出如下信息: ● firewalld.s…...
操作系统-用户进程
一、Makefile 这个 Makefile 要比之前的文件夹中的 Makefile 更加复杂,是因为之前的文件夹都是对操作系统特定部分的一个编译指导,所以基本上是实现的功能就是“对应的 C 文件和汇编文件编译成目标文件”这一个功能,最后合成一个整体。但是 …...
小驰私房菜_07_camx EIS使能
#小驰私房菜# #Qcom Cax# 本篇文章分下面几点展开: 1) camxoverridesettings.txt 中如何设置打开eis开关? 2)app打开eis,需要设置哪些request? 3) eisv2.0、eisv3.0分别是什么时候采用? 4)相关日志分析,日志上如何确认eis已经使能? 一、 camxoverridesettings.txt …...
互联网快速发展,孕育着新技术、新模式的全新时代正在到来
除了新时代的红利之外,在马云的回归之下,我更多地看到的是,人们信心的回归。这样一种回归,并不仅仅只是局限于企业家本身,纵然是对于普通民众来讲,同样是一种信心的回归。时下,经济复苏的号角开…...
【VUE】1、安装node.js
1、什么是 node.js 官方:Node.js is an open-source, cross-platform JavaScript runtime environment. 翻译:Node.js 是一个开源、跨平台的 JavaScript 运行时环境。 Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome…...
一文弄懂window.print()打印
一文弄懂window.print 打印前言window.print() 默认效果缺陷一、打印样式二、打印指定区域内容1. 对容器进行打印2. 对容器内的部分内容进行打印3. 监听打印前后事件4. iframe三、强行插入分页四、打印设置五、最佳实践(React)1. 背景:2. 思路…...
卷麻了,00后测试用例写的比我还好,简直无地自容.....
前言 作为一个测试新人,刚开始接触测试,对于怎么写测试用例很头疼,无法接触需求,只能根据站在用户的角度去做测试,但是这样情况会导致不能全方位的测试APP,这种情况就需要一份测试用例了,但是不…...
mysql性能优化之explain分析执行计划
前言 在实际工作中,如果已经定位到某些具体的sql需要进行explain分析进而优化,可以直接使用explainsql来分析其执行计划;如果还不能确定是哪些具体的sql语句需要进行explain分析进而优化,那么我们可以首先要定位哪些sql查询慢&…...
IDEA修改关键字和注释颜色
IDEA修改关键字和注释颜色 目录IDEA修改关键字和注释颜色1.修改关键字的默认颜色2.修改注释的默认颜色2.1 修改单行注释的颜色2.2 修改多行注释的颜色2.3 修改文档注释的颜色很多小白在刚刚使用IDEA的时候还不是很熟练 本文主要给大家提供一些使用的小技巧,希望能帮…...
数据库总结/个人总结
目录数据库数据和信息Data数据数据库数据库管理系统总结常见的数据库管理系统关系型数据库连接查询交叉连接、笛卡尔积内连接左连接右连接嵌套查询Jar在Java项目中使用.jar文件JDBC核心接口单表查询SQL注入简化JDBC视图View创建视图使用视图删除视图事务transaction事务的特性A…...
【Maven】开发自己的starter依赖
【Maven】开发自己的starter依赖 文章目录【Maven】开发自己的starter依赖1. 准备工作1.1 创建一个项目1.2 修改pom文件1.3 修改项目结构2. 动手实现2.1 创建客户端类2.2 创建配置类2.3 配置路径2.4 下载到本地仓库3. 测试1. 准备工作 1.1 创建一个项目 打开idea,…...
JVM与Java体系
JVM体系跟着尚硅谷的康师傅学习 JVM内存与垃圾回收概述 除了大部分的Java开发 人员,除了会在项目中使用到与Java平台相关的框架,与API,对于Java的虚拟机了解甚少。但是也需要我们知道如何处理OOM,SOF异常,除了…...
【C++笔试强训】第十二天
选择题 解析:引用:引用是对象的别名,并没有开辟属于自己的空间,两者同用一块内存,引用值改变也会引起引用对象值的改变; 引用在声明的时候必须要初始化,而指针不用,指针可以为空指针…...
C# | 使用DataGridView展示JSON数组
C# | 使用DataGridView展示JSON数组 文章目录C# | 使用DataGridView展示JSON数组前言实现原理实现过程完整源码前言 你想展示一个复杂的JSON数组数据吗?但是你却不知道该如何展示它,是吗?没问题,因为本文就是为解决这个问题而生的…...
Python入门到高级【第四章】
预计更新第一章. Python 简介 Python 简介和历史Python 特点和优势安装 Python 第二章. 变量和数据类型 变量和标识符基本数据类型:数字、字符串、布尔值等字符串操作列表、元组和字典 第三章. 控制语句和函数 分支结构:if/else 语句循环结构&#…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
