代码随想录刷题day16|(哈希表篇)349.两个数组的交集
目录
一、哈希表理论基础
二、集合set在哈希法中的应用
三、相关算法题目
四、相关知识点
1.set集合特点和常用方法
1.1 set集合概述
1.2 set集合特点
1.3 常用方法
2.set集合转换成数组
法1:另新建一个数组
法2:将结果集合转为数组 ▲
3.数组中元素放进set集合中
一、哈希表理论基础
详见 代码随想录刷题day15|(哈希表篇)242.有效的字母异位词、383.赎金信-CSDN博客
二、集合set在哈希法中的应用
一般来说,给定一个元素,判断是否在集合中出现过,这种情况下考虑使用哈希表来解决问题;
本题力扣中限制了数据范围,所以也可以用数组来做,如果没有限制数据范围,那么不可以使用数组来做(数组的长度不可变),同时,如果数值很大、或者数值不太大,但很分散,比如0、5、100万,那么也不适合用数组来做;
本题需要注意的一点是:最终返回的数组中,每个元素都是唯一的,即去重的,因此可以使用set集合,利用set集合中数据元素不重复的特性;
思路:将数组nums1的元素放到一个哈希表中,java中可以采用HashSet集合:set,这样set集合中没有重复元素;遍历nums2数组,并在set集合中查找nums2中每一个元素是否出现过,如果出现过,则为相交部分元素,放在另一HashSet集合:result中,最终将result集合转成数组 并返回;
为什么最终结果要放在集合result中?set保证了nums1中的元素不重复,但是nums2数组中元素也可能会重复,所以最终结果也可能会重复,所以需要放在result集合中;
补充:本题使用数组的思路
整体思路同使用set集合,具体实现上,将nums1数组中元素存储到哈希表中,此时哈希表使用数组array,用数组下标直接做哈希映射,将nums1中的每一个元素作为 数组的索引值,即 array [ nums1[i] ],并对该索引处的元素全部赋值为1,同时也能够达到去除重复数据的目的(如果有相同元素,在array中 表现为 对同一索引处的元素多次赋值为1);
接着,遍历nums2,并在哈希数组中查找每一个元素:将nums2数组中的每一个元素作为array数组的索引值,查看对应索引值是否为1,如果为1,则说明是相交元素,否则,不是相交元素;
最后,将相交元素存入新建集合result中⚠️,这里使用集合是为了去除重复元素,最后再将集合转成数组,然后返回;
与set集合的区别:
使用set集合时,每add一个值,就要进行一次哈希运算,将该值转换成内部存储的一个值,同时需要开辟一个新的空间,相对数组来说,需要更多的时间,花费更高;
三、相关算法题目
349.两个数组的交集
349. 两个数组的交集 - 力扣(LeetCode)
使用set集合:
class Solution {public int[] intersection(int[] nums1, int[] nums2) {//定义HashSet集合 HashSet<Integer> set =new HashSet<Integer>();HashSet<Integer> result =new HashSet<Integer>();//将nums1放到哈希表结构中 增强for循环▲ set无法使用普通for循环for(int c : nums1){set.add(c);}//遍历数组2的过程中判断哈希表中是否存在该元素for(int c : nums2){if(set.contains(c)){result.add(c);}}//把set 转化成 数组//另外申请一个数组存放setRes中的元素,最后返回数组int[] arr = new int[result.size()];int j = 0;for(int c : result){arr[j++] = c;}return arr;}
}
使用数组:
class Solution {public int[] intersection(int[] nums1, int[] nums2) {//使用数组int[] array = new int[1002];//定义哈希数组HashSet<Integer> result = new HashSet<Integer>();//存放结果的集合 去除重复元素//将nums1中的元素 添加到哈希数组中for(int i = 0;i < nums1.length;i++){array[nums1[i]] = 1;}//遍历nums2数组 在哈希数组中查找对应元素for(int c : nums2){if(array[c] == 1){result.add(c);}}//新建数组 存储集合result中的结果int[] array2 = new int[result.size()];int i = 0;for(int c : result){array2[i] = c;i++;}return array2;}
}
四、相关知识点
1.set集合特点和常用方法
1.1 set集合概述
set集合的父类是collection(单列集合),set集合中常用的两个实现类为:HashSet 和 TreeSet,前者底层数据结构是哈希表,后者是红黑树;
定义set集合,set是接口,不可直接创建对象,只能通过实现类创建具体的对象;
Set<Integer> set = new HashSet<Integer>();
1.2 set集合特点
- set集合:不可存储重复元素、没有索引,不能使用普通for循环遍历;
- HashSet集合:set集合特点➕可以将元素按照规则进行排序;
- TreeSet集合:set集合特点➕存取无序;
1.3 常用方法

几个常用方法:
boolean add(E e) :向集合中添加元素;
boolean contains(Object o):查找集合中是否存在元素o;
int size():返回集合中元素个数;
Object[] toArray():返回一个包含set集合中的所有元素的数组;
2.set集合转换成数组
法1:另新建一个数组
另外申请一个数组存放HashSet中的元素,最后返回数组;
int[] arr = new int[result.size()];
int j = 0;
for(int c : result){arr[j++] = c;
}
法2:将结果集合转为数组 ▲
result.stream().mapToInt(x -> x).toArray();
-
resSet.stream():-
将
HashSet<Integer>转换为一个流(Stream)。流是一种高级迭代器,可以对集合中的元素进行操作。
-
-
.mapToInt(x -> x):-
将流中的每个元素(
Integer类型)映射为int类型。x -> x是一个Lambda表达式,表示将输入的Integer对象直接转换为其基本类型int。
-
-
.toArray():-
将流中的
int类型元素收集到一个数组中,返回一个int[]。
-
最终,这行代码返回一个 int[] 类型的数组,其中包含集合 result中的所有元素。
PS:为什么 return result.toArray() 报错?▲
incompatible types: Object[] cannot be converted to int[]
这行代码尝试将一个集合(如 HashSet<Integer>)直接转换为数组。然而,toArray() 方法返回的是一个 Object[] 类型的数组,而不是 int[]。在Java中,Object[] 和 int[] 是不兼容的类型,因此不能直接将 Object[] 赋值给 int[]。
3.数组中元素放进set集合中
使用增强for循环;
for(int c : nums1){set.add(c);
}相关文章:
代码随想录刷题day16|(哈希表篇)349.两个数组的交集
目录 一、哈希表理论基础 二、集合set在哈希法中的应用 三、相关算法题目 四、相关知识点 1.set集合特点和常用方法 1.1 set集合概述 1.2 set集合特点 1.3 常用方法 2.set集合转换成数组 法1:另新建一个数组 法2:将结果集合转为数组 ▲ 3.数组…...
Synology 群辉NAS安装(6)安装mssql
Synology 群辉NAS安装(6)安装mssql 写在前面mssql 2019:成功安装说明,这个最终成功了 mssql 2022没有成功1. pull image2.启动mssql docker container 远程连接 写在前面 mssq是一个重要节点。 这是因为我对mysql没有一丝好感。虽然接触了许…...
2025年美赛B题-结合Logistic阻滞增长模型和SIR传染病模型研究旅游可持续性-成品论文
模型设计思路与创新点: 建模的时候应该先确定我们需要建立什么类的模型?优化类还是统计类?这个题需要大量的数据分析,因此我们可以建立一个统计学模型。 统计学建模思路:观察规律,建立模型,参…...
Hook 函数
什么是hook函数? 在计算机编程中,hook函数是指在特定的事件发生时被调用的函数,用于在事件发生前或后进行一些特定的操作。通常,hook函数作为回调函数被注册到事件处理器中,当事件发生时,事件处理器会自动…...
蓝桥杯模拟算法:蛇形方阵
P5731 【深基5.习6】蛇形方阵 - 洛谷 | 计算机科学教育新生态 我们只要定义两个方向向量数组,这种问题就可以迎刃而解了 比如我们是4的话,我们从左向右开始存,1,2,3,4 到5的时候y就大于4了就是越界了&…...
DeepSeek-R1解读:纯强化学习,模型推理能力提升的新范式?
DeepSeek-R1解读:纯强化学习,模型推理能力提升的新范式? 1. Impressive Points2. 纯强化学习,LLM推理能力提升新范式?2.1 DeepSeek-R1-Zero2.2 DeepSeek-R1 3. 端侧模型能力提升:蒸馏>强化学习 1. Impre…...
深度解析:基于Vue 3的教育管理系统架构设计与优化实践
一、项目架构分析 1. 技术栈全景 项目采用 Vue 3 TypeScript Tailwind CSS 技术组合,体现了现代前端开发的三大趋势: 响应式编程:通过Vue 3的Composition API实现细粒度响应 类型安全:约60%的组件采用TypeScript编写 原子化…...
【PyTorch】3.张量类型转换
个人主页:Icomi 在深度学习蓬勃发展的当下,PyTorch 是不可或缺的工具。它作为强大的深度学习框架,为构建和训练神经网络提供了高效且灵活的平台。神经网络作为人工智能的核心技术,能够处理复杂的数据模式。通过 PyTorch࿰…...
Spring Boot整合JavaMail实现邮件发送
一. 发送邮件原理 发件人【设置授权码】 - SMTP协议【Simple Mail TransferProtocol - 是一种提供可靠且有效的电子邮件传输的协议】 - 收件人 二. 获取授权码 开通POP3/SMTP,获取授权码 授权码是QQ邮箱推出的,用于登录第三方客户端的专用密码。适用…...
字节跳动发布UI-TARS,超越GPT-4o和Claude,能接管电脑完成复杂任务
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
数据的秘密:如何用大数据分析挖掘商业价值
数据的秘密:如何用大数据分析挖掘商业价值 在这个数据爆炸的时代,我们每天都在产生、存储和处理着海量的数据。然而,仅仅拥有数据并不等于拥有价值。就像拥有一座金矿,不开采和提炼,最终只是一堆毫无用处的石头。如何…...
OAuth1和OAuth2授权协议
OAuth 1 授权协议 1. 概述 OAuth1 是 OAuth 标准的第一个正式版本,它通过 签名和令牌 的方式,实现用户授权第三方访问其资源的功能。在 OAuth1 中,安全性依赖于签名机制,无需传递用户密码。 2. 核心特性 使用 签名(…...
AI学习(vscode+deepseek+cline)
1、网页生成不成功时,直接根据提示让模型替你解决问题 2、http://localhost:3000 拒绝链接时,cmd输入命令InetMgr,网站右键新建-配置你的网页代码物理地址,这里我还输入本机登录名及密码了,并把端口地址由默认80修改为…...
04-机器学习-网页数据抓取
网络爬取(Web Scraping)深度指南 1. 网络爬取全流程设计 一个完整的网络爬取项目通常包含以下步骤: 目标分析: 明确需求:需要哪些数据(如商品价格、评论、图片)?网站结构分析&…...
计网week1+2
计网 一.概念 1.什么是Internet 节点:主机及其运行的应用程序、路由器、交换机 边:通信链路,接入网链路主机连接到互联网的链路,光纤、网输电缆 协议:对等层的实体之间通信要遵守的标准,规定了语法、语义…...
重定向与缓冲区
4种重定向 我们有如下的代码: #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <string.h>#define FILE_NAME "log.txt"int main() {close(1)…...
练习题 - Django 4.x File 文件上传使用示例和配置方法
在现代的 web 应用开发中,文件上传是一个常见的功能,无论是用户上传头像、上传文档,还是其他类型的文件,处理文件上传都是开发者必须掌握的技能之一。Django 作为一个流行的 Python web 框架,提供了便捷的文件上传功能和配置方法。学习如何在 Django 中实现文件上传,不仅…...
[VSCode] vscode下载安装及安装中文插件详解(附下载链接)
VSCode 是一款由微软开发且跨平台的免费源代码编辑器;该软件支持语法高亮、代码自动补全、代码重构、查看定义功能,并且内置了命令行工具和Git版本控制系统。 下载链接:https://pan.quark.cn/s/3a90aef4b645 提取码:NFy5 通过上面…...
JVM常见知识点
在《深入理解Java虚拟机》一书中,介绍了JVM的相关特性。 1、JVM的内存区域划分 在真实的操作系统中,对于地址空间进行了分区域的设计,由于JVM是仿照真实的机器进行设计的,那么也进行了分区域的设计。核心区域有四个,…...
深入探索 Vue 3 Markdown 编辑器:高级功能与实现
目录 1. 为什么选择 Markdown 编辑器?2. 选择合适的 Markdown 编辑器3. 安装与基本配置安装 配置 Markdown 编辑器代码说明 4. 高级功能实现4.1 实时预览与双向绑定4.2 插入图片和图像上传安装图像上传插件配置图像上传插件 4.3 数学公式支持安装 KaTeX配置 KaTeX 插…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
WEB3全栈开发——面试专业技能点P7前端与链上集成
一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...
