代码随想录刷题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 插…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
