(哈希表 ) 349. 两个数组的交集 ——【Leetcode每日一题】
❓349. 两个数组的交集
难度:简单
给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的
提示:
- 1 <= nums1.length, nums2.length <= 1000
- 0 <= nums1[i], nums2[i] <= 1000
💡思路:
法一:排序+双指针
如果两个数组是有序的,则可以使用双指针的方法得到两个数组的交集。
- 首先对两个数组进行排序;
- 然后使用两个指针遍历两个数组。可以预见的是加入答案的数组的元素一定是递增的;
- 为了保证加入元素的唯一性,我们在向结果数组
ans添加元素时,要判断该元素是否已经存在(如果ans添加第一个元素时,不需要判断)。
法二:哈希表
输出结果中的每个元素一定是唯一的,也就是说输出的结果的去重的,根据哈希表的性质可以去重:
- 首先将
num1中的元素放到哈希表s1中; - 然后遍历
num2中元素,如果s1中也存在,则保存到另一个哈希表ans中; - 最后哈希表
ans就是所求交集,将结果集合转为数组。
🍁代码:(Java、C++)
法一:排序+双指针
Java
class Solution {public int[] intersection(int[] nums1, int[] nums2) {Arrays.sort(nums1);Arrays.sort(nums2);int len1 = nums1.length, len2 = nums2.length;int[] ans = new int[Math.min(len1, len2)];int index1 = 0, index2 = 0, index = 0;while(index1 < len1 && index2 < len2){if(nums1[index1] == nums2[index2]){if(index == 0){ans[index++] = nums1[index1];}else if(nums1[index1] != ans[index - 1]){ans[index++] = nums1[index1];}index1++;index2++;}else if(nums1[index1] < nums2[index2]){index1++;}else{index2++;}}return Arrays.copyOfRange(ans, 0, index);}
}
C++
class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {sort(nums1.begin(), nums1.end());sort(nums2.begin(), nums2.end());vector<int> ans;vector<int>::iterator ite1 = nums1.begin(), ite2 = nums2.begin();while(ite1 != nums1.end() && ite2 != nums2.end()){if(*ite1 == *ite2){if(ans.size() == 0){ans.push_back(*ite1);}else if(*ite1 != ans.back()){ans.push_back(*ite1);}ite1++;ite2++;}else if(*ite1 < *ite2){ite1++;}else{ite2++;}}return ans;}
};
法二:哈希表
Java
class Solution {public int[] intersection(int[] nums1, int[] nums2) {Set<Integer> s1 = new HashSet<Integer>();Set<Integer> ans = new HashSet<Integer>();for(int num : nums1){s1.add(num);}for(int num: nums2){if(s1.contains(num)){ans.add(num);}}//将结果集合转为数组, 另外申请一个数组存放setRes中的元素,最后返回数组int[] arr = new int[ans.size()];int j = 0;for(int i : ans){arr[j++] = i;}return arr;}
}
C++
class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set<int> s(nums1.begin(), nums1.end());unordered_set<int> ans;for(int num : nums2){if(s.find(num) != s.end()){ans.insert(num);}}return vector<int>(ans.begin(), ans.end());;}
};
🚀 运行结果:

🕔 复杂度分析:
- 时间复杂度:法一: O ( m l o g m + n l o g n ) O(m \ log m+n \ log n) O(m logm+n logn),其中
m和n分别是两个数组的长度。对两个数组排序的时间复杂度分别是 O ( m log m ) O(m \log m) O(mlogm) 和 O ( n log n ) O(n \log n) O(nlogn),双指针寻找交集元素的时间复杂度是 O ( m + n ) O(m+n) O(m+n)。法二为: O ( m + n ) O(m + n) O(m+n)。 - 空间复杂度:法一: O ( l o g m + l o g n ) O( log m+ log n) O(logm+logn),其中
m和n分别是两个数组的长度 , 空间复杂度主要取决于排序使用的额外空间。法二为: O ( n ) O(n) O(n),n为两数组长度的最小值。
题目来源:力扣。
放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!
注: 如有不足,欢迎指正!
相关文章:
(哈希表 ) 349. 两个数组的交集 ——【Leetcode每日一题】
❓349. 两个数组的交集 难度:简单 给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1: 输入:nums1 [1,2,2,1], nums2 [2,2] 输出:[…...
JavaScript基本语法(二)
JavaScript基本语法 1、变量1.1、简介1.2、变量命名规则1.3、JS的关键字和保留字1.4、声明提升 2、JavaScript数据类型2.1、基本类型2.2、引用类型2.3、两种类型的区别2.4、字符串常用方法 3、数据类型转换 1、变量 1.1、简介 在 JavaScript 中声明一个新变量的方法是使用关键…...
ChatGPT3.5-4资源汇总,直连无梯子
什么是ChatGPT? ChatGPT,全称:聊天生成预训练转换器(英语:Chat Generative Pre-trained Transformer),是OpenAI开发的人工智能聊天机器人程序,于2022年11月推出。该程序使用基于GPT-3.5、GPT-4…...
【Netty】使用 SSL/TLS 加密 Netty 程序(二十)
文章目录 前言一、SSL/TLS概述二、Sslhandler类 前言 回顾Netty系列文章: Netty 概述(一)Netty 架构设计(二)Netty Channel 概述(三)Netty ChannelHandler(四)ChannelP…...
runway gen2
来自Runway文生成视频ai大模型Gen-2_哔哩哔哩_bilibili来自Runway文生成视频ai大模型Gen-2,距离视频制作自由又近了一步。, 视频播放量 1651、弹幕量 0、点赞数 21、投硬币枚数 2、收藏人数 42、转发人数 22, 视频作者 旭升说, 作者简介 一起聊下互联网的那些事&…...
Day2:Windows网络编程-TCP
今天开始进入Windows网络编程的学习,在学习的时候总是陷入Windows复杂的参数,纠结于这些。从老师的讲解中,这些内容属于是定式,主要学习写的逻辑。给自己提个醒,要把精力放在正确的位置,不要无端耗费精力。…...
leetcode1985. 找出数组中的第 K 大整数
给你一个字符串数组 nums 和一个整数 k 。nums 中的每个字符串都表示一个不含前导零的整数。 返回 nums 中表示第 k 大整数的字符串。 注意:重复的数字在统计时会视为不同元素考虑。例如,如果 nums 是 ["1","2","2"]&am…...
基于深度学习的高精度野生动物检测识别系统(PyTorch+Pyside6+YOLOv5模型)
摘要:基于深度学习的高精度野生动物检测(水牛、犀牛、斑马和大象)识别系统可用于日常生活中或野外来检测与定位野生动物目标,利用深度学习算法可实现图片、视频、摄像头等方式的野生动物目标检测识别,另外支持结果可视…...
从零开始 Spring Boot 35:Lombok
从零开始 Spring Boot 35:Lombok 图源:简书 (jianshu.com) Lombok是一个java项目,旨在帮助开发者减少一些“模板代码”。其具体方式是在Java代码生成字节码(class文件)时,根据你添加的相关Lombok注解或类来…...
深入解析Spring源码系列:Day 6 - Spring MVC原理
深入解析Spring源码系列:Day 6 - Spring MVC原理 欢迎来到本系列的第六篇博客。在前几篇博客中,我们探索了Spring框架的核心概念,包括Bean的生命周期、作用域、AOP原理和事务管理。今天,我们将深入研究Spring框架中的MVC…...
Cmake中message函数 如何优雅地输出
message函数说明 在CMake中,message()函数用于向终端输出信息。 message([<mode>] "message text" ...)函数的<mode>参数可以是以下之一: (none): 等同于STATUS,但不推荐使用。STATUS: 输出的信息会被发送到CMake的…...
人工智能基础部分20-生成对抗网络(GAN)的实现应用
大家好,我是微学AI,今天给大家介绍一下人工智能基础部分20-生成对抗网络(GAN)的实现应用。生成对抗网络是一种由深度学习模型构成的神经网络系统,由一个生成器和一个判别器相互博弈来提升模型的能力。本文将从以下几个方面进行阐述࿱…...
JavaScript表单事件(上篇)
目录 一、input: 当表单元素的值发生改变时触发,适用于大多数表单元素。 二、change: 当表单元素的值发生改变且失去焦点时触发,适用于输入框、下拉列表等。 三、submit: 当表单提交时触发,适用于 form 元素。 四、reset: 当表单重置时触…...
vb6 Webview2微软Edge Chromium内核执行JS取网页数据测速
微软Edge Chromium内核执行JS获取网页数据测试 ExcuteScript eval(document.body.innerHTML) from : https://www.163.com 采集的网页HTM字符串占用字节空间1.2MB ExcuteScript回调事件中取得JS执行结果,用时 54 毫秒 其中JSON转字符13.5209毫秒 jSON数据长度: 增…...
编码,Part 1:ASCII、汉字及 Unicode 标准
个人博客 编码的历史由来就懒得介绍了,只需要知道人类处理文本信息是以字符为基本单位,而计算机在最底层只认识 0/1,所以当计算机要为人类存储/呈现字符时,就需要有一个规则,在字符和 0/1 序列之间建立映射关系&#…...
C++ Eigen库矩阵操作
C Eigen库 序号功能例子1赋值Eigen::MatrixXf mat (12,1); \\% mat << 1, 2, 3, 4,5,6,7,8,9,10,11,12;2Inplace操作 \\% resizemat.resize(4, 3); \\% 1 5 9 \\% 2 6 10 \\% 3 7 11 \\% 4 8 123转置 \\% transposeInPlacemat.transposeInPlace(); \\% 1 2 3 4 \\% 5…...
Linux-0.11 boot目录bootsect.s详解
Linux-0.11 boot目录bootsect.s详解 模块简介 bootsect.s是磁盘启动的引导程序,其概括起来就是代码的搬运工,将代码搬到合适的位置。下图是对搬运过程的概括,可以有个印象,后面将详细讲解。 bootsect.s主要做了如下的三件事: 搬…...
django组件552
前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python:一种编程语言&…...
【枚举算法的Java实现及其应用】
文章目录 枚举算法概述枚举算法的实现步骤Java实现枚举算法枚举算法的底层工作原理枚举算法的底层代码讲解枚举算法的实际应用场景枚举算法在场景中解决的问题总结 枚举算法概述 枚举算法是一种通过列举所有可能情况来解决问题的方法。这种算法在解决一些特定类型的问题时非常…...
linux led 驱动
前言 今天是儿童节,挣个奖牌给小孩玩玩。 在 linux 驱动大家庭中,LED 驱动算是个儿童,今天就写写他吧。正好之前写过他的婴儿时期《i.MX6ULL 裸机点亮 LED》,记得那时候他还穿着开裆裤呢,裸鸡嘛。 ioremap() 裸机程…...
VisualCppRedist AIO:解决Windows运行库管理难题的一站式方案
VisualCppRedist AIO:解决Windows运行库管理难题的一站式方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 一、直面运行库困境:三大场…...
Phi-3-mini-4k-instruct-gguf入门必看:轻量模型与Llama3/Qwen对比——适用边界与选型建议
Phi-3-mini-4k-instruct-gguf入门必看:轻量模型与Llama3/Qwen对比——适用边界与选型建议 1. 认识Phi-3-mini-4k-instruct-gguf Phi-3-mini-4k-instruct-gguf是微软Phi-3系列中的轻量级文本生成模型GGUF版本。这个模型特别适合处理问答、文本改写、摘要整理和简短…...
LTSC-Add-MicrosoftStore:Windows 11 24H2 LTSC应用商店恢复工具实战指南
LTSC-Add-MicrosoftStore:Windows 11 24H2 LTSC应用商店恢复工具实战指南 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore 1. 问题本质&…...
3款高效AI答题工具助力B站硬核会员试炼
3款高效AI答题工具助力B站硬核会员试炼 【免费下载链接】bili-hardcore bilibili 硬核会员 AI 自动答题脚本,直接调用 B 站 API,非 OCR 实现 项目地址: https://gitcode.com/gh_mirrors/bi/bili-hardcore B站硬核会员试炼要求用户在100道专业题目…...
基于CubeMX与HAL库:STM32F302串口重定向Printf的工程化实践
1. 为什么需要串口重定向Printf 在嵌入式开发中,调试信息输出是排查问题的生命线。想象一下你正在调试一个复杂的传感器数据采集系统,突然发现数据异常,这时候如果能像在PC上编程一样直接printf("当前温度值:%f", temp…...
Qwen3.5-2B保姆级教程:20亿参数模型端侧部署与图文对话实操
Qwen3.5-2B保姆级教程:20亿参数模型端侧部署与图文对话实操 1. 模型简介 Qwen3.5-2B是阿里云推出的轻量化多模态基础模型,属于Qwen3.5系列的小参数版本(20亿参数)。这个模型专为低功耗、低门槛部署场景设计,特别适合在端侧和边缘设备上运行…...
从零部署RT-DETR:手把手教你训练自定义目标检测数据集
1. RT-DETR简介与环境配置 RT-DETR是百度推出的实时目标检测Transformer模型,相比传统CNN架构的YOLO系列,它在保持高精度的同时实现了更快的推理速度。我第一次接触这个模型时,就被它的"端到端检测"特性吸引了——不需要复杂的后处…...
Zebu仿真加速实战:从编译到覆盖率的芯片验证效率提升指南
1. Zebu仿真加速环境配置实战 第一次接触Zebu仿真加速器时,我被它复杂的编译环境折腾得够呛。记得有次项目紧急交付,光是解决编译问题就耗了两天。后来才发现,很多问题其实都有规律可循。 1.1 跨平台编译的坑与解决方案 最让人头疼的就是从…...
KubeSphere vs Kuboard:Kubernetes管理工具选型与实战对比
KubeSphere vs Kuboard:深度对比与选型指南 1. 开篇:为什么需要Kubernetes管理工具? 在云原生技术蓬勃发展的今天,Kubernetes已成为容器编排领域的事实标准。然而,原生Kubernetes Dashboard的功能相对基础,…...
从腾讯AI架构师那里听到的:他们正在重点研究的4个新前沿AI方向
腾讯AI架构师揭秘:当下重点突破的4个前沿AI方向 清晨的深圳滨海大厦会议室里,腾讯AI Lab的架构师张明(化名)放下咖啡杯,翻开电脑里的项目进度表——屏幕上跳动的图表里,“MoE轻量化” “多模态因果推理” “…...
