力扣-349. 两个数组的交集

news/2024/5/17 18:41:47

1.题目

题目地址(349. 两个数组的交集 - 力扣(LeetCode))

https://leetcode.cn/problems/intersection-of-two-arrays/

题目描述

给定两个数组 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

2.题解

2.1 哈希集合

思路

使用unordered_set进行去重,然后查看交集即可

代码

  • 语言支持:C++

C++ Code:


class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set<int> st1, st2;vector<int> ans;for(int &num : nums1){st1.emplace(num);}for(int &num : nums2){st2.emplace(num);}for(const int &num : st1){if(st2.count(num)){ans.emplace_back(num);}}return ans;}
};

复杂度分析

  • 时间复杂度:\(O(m+n)\),其中\(m\)\(n\)分别是两个数组的长度。
    使用两个集合分别存储两个数组中的元素需要\(O(m+n)\)的时间,
    遍历较小的集合并判断元素是否在另一个集合中需要\(O(\min(m,n))\)的时间,
    因此总时间复杂度是\(O(m+n)\)
  • 空间复杂度:\(O(m+n)\),
    其中\(m\)\(n\)分别是两个数组的长度。
    空间复杂度主要取决于两个集合。

2.2 排序+双指针

思路

代码

class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {sort(nums1.begin(), nums1.end());sort(nums2.begin(), nums2.end());int length1 = nums1.size(), length2 = nums2.size();int index1 = 0, index2 = 0;vector<int> intersection;while (index1 < length1 && index2 < length2) {int num1 = nums1[index1], num2 = nums2[index2];if (num1 == num2) {// 保证加入元素的唯一性if (!intersection.size() || num1 != intersection.back()) {intersection.push_back(num1);}index1++;index2++;} else if (num1 < num2) {index1++;} else {index2++;}}return intersection;}
};

复杂度分析

  • 时间复杂度:\(O(m\log m+n\log n)\),其中\(m\)\(n\)分别是两个数组的长度。
    对两个数组排序的时间复杂度分别是\(O(m\log m)\)\(O(n\log n)\) ,
    双指针寻找交集元素的时间复杂度是\(O(m+n)\) ,
    因此总时间复杂度是\(O(m\log m+n\log n)\)
  • 空间复杂度:\(O(\log m+\log n)\),其中\(m\)\(n\)分别是两个数组的长度。
    空间复杂度主要取决于排序使用的额外空间。

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

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

相关文章

springboot整合knfi4j

1.pom文件添加依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version></dependency>2.配置knfi4j @Configuration @EnableSwagger2 @Enable…

github在开启双因素认证后无法push

github在开启了双因素认证后,无法push代码 解决办法 1.打开github,点击右上角头像,点击setting2.选择左边菜单最右下角的Developer Settings3.点击 Person access tokens,选择第二个,Tokens(classic)4.创建一个token,可以选择过期时间和权限,如果是个人使用,直接选择不过期,勾上…

mysql刷题题后感

刷题的时候会将一些题目收藏,也会收藏错题,做完了整合一下,会有一些补充知识点。函数篇(和长篇大论的查询有交集) Q1: 查询语句select stuff(lo ina,3, 1, ve ch)结果为?love love china china love china答:stuff,删除并加入字符,STUFF(原字符, 开始位置, 删除长度,…

软件设计师:UML

UML基本概念UML(Unified Modeling Language,统一建模语言) UML词汇表包含3种构造块:事物、关系、图 事物结构事物:静态部分,如类、接口、用例等 行为事物:动态部分,如交互、状态机、活动 分组事物:包Package 注释事物:注释关系 UML中有4种关系:依赖、关联、泛化、实现…

linux13-用户,用户组

linux13-用户,用户组需要root权限执行 group add 创建用户组 # 查看含有关键词catcats66的组, 不存在 getent group | catcats66# 添加用户组catcats66 sudo groupadd catcats66 # 查询到含有关键词catcats66的组 getent group | catcats66groupdel 删除用户组 # 删除用户组 gr…

【VMware vSAN】如何删除虚拟机存储策略中的vSAN默认存储策略。

登录vSphere Client,展开左上角设置-策略和配置文件-虚拟机存储策略,可以查看系统默认创建的虚拟机存储策略。这些存储策略由系统自动生成,其中有一部分存储策略仅用于vSAN数据存储,作为vSAN 默认存储策略以应用于,当在部署虚拟机时未进行自定义存储策略时所默认分配的策略…

探索软件设计的九大核心架构模式

在当今迅速发展的软件开发领域,设计出卓越的软件系统是每一位程序员的追求。软件架构扮演着至关重要的角色,决定了系统的可维护性、可扩展性和性能。本文将深入探讨九大核心架构模式,揭示它们在软件设计中的美妙之处,以及在实际应用中的最佳实践。 分层架构(Layered Archi…

XSS(Pikachu)

XSS(Pikachu靶场) 概述 Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型: 1.反射性XSS; 2.存储型XSS; 3.DOM型XSS; XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一…