leetcode-349.两个数组的交集

news2024/11/13 18:58:13

题源

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

思考

思考一

将nums1的元素存入map

然后在nums1中找nums2,找到就存储res中

实现思考一代码

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        //输出结果中的每个元素一定是唯一 的,那么可以用set将nums1去重
        //然后用set在nums2中找到
        vector<int> res;
        unordered_map<int,int> map;
        //由于输出元素是一定的,所以无论nums1中有多少个相同的元素,只需要都置为1
        for(int num : nums1){
            map[num] = 1;
        }
        //在nums2中找到和nums1中一样的元素
        for(int num : nums2){
            if(map[num]){
                //找到了便加到res中
                res.push_back(num);
                //避免重复添加,减一
                map[num]--;
            } 
        }
        return res;
    }
};

在这里插入图片描述

思考一代码时间复杂度分析

将nums作为存入map中需要耗费O(n)的时间复杂度

在nums2中找到和nums1中一样的元素也需要耗费O(n)的时间复杂度

综合来看,这是一个时间复杂度为O(n)的算法

思考二

既然输出结果中的每个元素一定是唯一 的,那么可以用set将nums1去重

然后用set在nums2中找到存在于nums1中的元素,找到就存入res

实现思二代码

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        // 创建一个 unordered_set 来存储 nums1 中的所有元素
        unordered_set<int> nums1Set(nums1.begin(), nums1.end());

        // 用于存放结果的 vector
        vector<int> res;

        // 遍历 nums2 中的每个元素
        for (int num : nums2) {
            // 如果元素在 nums1Set 中存在,且结果中还没有这个元素
            if (nums1Set.count(num) > 0 && find(res.begin(), res.end(), num) == res.end()) {
                // 将元素添加到结果中
                res.push_back(num);
            }
        }

        return res;
    }
};

在这里插入图片描述

思考二代码时间复杂度分析

find(res.begin(), res.end(), num) == res.end())本身是o(n)的时间复杂度

再加上遍历nums2的for()循环

这个算法也就会耗费o(n^2)的时间复杂度

思考三

思考二中用vector容器来保存答案,需要用find去保证添加进vector的元素唯一

现在我可以用set来保存答案,就不需要这个O(n)时间复杂度的find()方法

思考三代码

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        //既然输出结果中的每个元素一定是唯一 的,那么可以用set将nums1去重
 
        //然后用set存储最终的答案,也免去的答案去重的步骤
        unordered_set<int> setRes;
        //用set将nums1去重
        unordered_set<int> set(nums1.begin(),nums1.end());
        for(int num : nums2){
            if(set.count(num)){
                //用set保证集合的元素唯一
                setRes.insert(num);
            }
        }
        return vector<int>(setRes.begin(),setRes.end());

    }
};

在这里插入图片描述

思考三代码时间复杂度分析

由于只用了一个for()循环,花费了O(n)的时间复杂度

虽然最后将set转为vector会花费O(m)的时间复杂度

综合依然只用了O(n)的时间复杂度,但不知道为什么会耗时这么多

注:诸位站友如有所收获不妨点个免费的赞,如有错误之处或有其它补充的点,请在评论区发表你的观点,看到必回。

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

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

相关文章

深度解读昇腾CANN模型下沉技术,提升模型调度性能

AI模型的运行通常情况下需要CPU和NPU&#xff08;昇腾AI处理器&#xff09;等AI专用处理器协同工作&#xff0c;CPU所在位置称为主机端&#xff08;Host&#xff09;&#xff0c;而NPU所在位置称为设备端&#xff08;Device&#xff09;。对于采用Host调度的AI模型来说&#xf…

金蝶云星空与金蝶云星空对接集成付款单查询打通[标准][付款单新增]-v1

金蝶云星空与金蝶云星空对接集成付款单查询打通[标准][付款单新增]-v1 对接源平台:金蝶云星空 金蝶K/3Cloud在总结百万家客户管理最佳实践的基础上&#xff0c;提供了标准的管理模式&#xff1b;通过标准的业务架构&#xff1a;多会计准则、多币别、多地点、多组织、多税制应用…

vitest 单元测试应用与配置

vitest 应用与配置 一、简介 Vitest 旨在将自己定位为 Vite 项目的首选测试框架&#xff0c;即使对于不使用 Vite 的项目也是一个可靠的替代方案。它本身也兼容一些Jest的API用法。 二、安装vitest // npm npm install -D vitest // yarn yarn add -D vitest // pnpm pnpm …

CoT-SC论文速读

1.论文速读 本文提出了一个重要的Decoder策略为&#xff1a;“Self-Consistency”,并将其用在CoT的Prompt工作中。 该策略作用&#xff1a;让LLM在处理复杂问题时&#xff0c;让他尝试多个推理路径&#xff0c;每一个推理路径都是一次CoT&#xff08;Chain of Thought&#x…

构建实用的NLP应用程序:重塑人类与计算机的协同工作方式

文章目录 一、NLP技术的核心价值二、构建实用NLP应用程序的关键步骤三、NLP应用程序在协同工作中的创新应用《赠ChatGPT中文范例的自然语言处理入门书》编辑推荐内容简介作者简介精彩书评目录前言/序言获取方式 在数字化时代&#xff0c;自然语言处理&#xff08;NLP&#xff0…

哥德巴赫猜想c++

方法一 #include<bits/stdc.h> using namespace std; //定义函数&#xff0c;判断素数 bool sushu(int n){bool rtrue;//先假设是素数&#xff0c;即真//循环因子范围&#xff0c;找到一个因子就不是素数for(int i2;i<sqrt(n);i){//判断2~n的根号是否素数if(n%i0){//…

码住!热门且创新idea:GNN+强化学习!

如何提高学习效率、优化策略&#xff0c;并解决复杂的图结构相关问题&#xff1f;或许你可以考虑&#xff1a;GNN强化学习。 GNN结合强化学习是当前的热门创新方向&#xff0c;它通过利用GNN在图形数据上的强大表示能力与强化学习在决策制定中的优势&#xff0c;不仅能够有效处…

鸿蒙语言基础类库:【@ohos.uitest (UiTest)】 测试

UiTest UiTest提供模拟UI操作的能力&#xff0c;供开发者在测试场景使用&#xff0c;主要支持如点击、双击、长按、滑动等UI操作能力。 该模块提供以下功能&#xff1a; [By]&#xff1a;提供控件特征描述能力&#xff0c;用于控件筛选匹配查找。[UiComponent]&#xff1a;代…

中电金信:成功的智慧运营转型,重点是把握“一个基本点和两大主线”

“运营”是银行不可或缺的基础职能&#xff0c;负责产品的服务交付过程和业务的落地处理&#xff0c;解决商业模式下“怎么做”的问题。纵观全球领先银行的运营转型历程&#xff0c;已从传统分散运营逐步转向集中运营、共享运营&#xff0c;乃至价值创造。从国内银行运营转型发…

微信小程序毕业设计-青少年科普教学系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

基于SpringBoot协同过滤算法商品推荐系统(源码+lw+部署文档+讲解等)

前言&#xff1a; 博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBo…

C++面试问题

C基础 什么是野指针&#xff1f; 指向未分配或已释放内存的指针。比如未初始化、delete后未指向空、保存了局部变量的地址 怎么解决野指针问题&#xff1f; 使用智能指针释放后置空指针初始化避免返回局部变量的地址 C空类会创造那些函数&#xff1f; 默认构造析构函数拷…

【qt】TCP客户端如何断开连接?

disconnectFromHost() 来关闭套接字,断开连接. 当我们关闭窗口时,也需要断开连接. 需要重写关闭事件 如果当前的套接字状态是连接上的,我们就可以来断开连接. 运行结果:

空安全编程的典范:Java 8中的安全应用指南

文章目录 一、Base64 编码解码1.1 基本的编码和解码1.2 URL 和文件名安全的编码解码器1.3 MIME Base64编码和解码 二、Optional类三、Nashorn JavaScript 一、Base64 编码解码 1.1 基本的编码和解码 Base64 编码&#xff1a; 使用 Base64.getEncoder().encodeToString(origin…

vue3 快速入门 (一) : 环境配置与搭建

1. 本文环境 Vue版本 : 3.4.29Node.js版本 : v20.15.0系统 : Windows11 64位IDE : VsCode 2. 安装Node.Js 首先&#xff0c;我们需要安装Node.Js。Node.js提供了运行 JavaScript 代码的环境。并且Node.js 带来了 npm&#xff0c;它是JavaScript世界的包管理工具。开发vue时&…

苹果手机相册图片怎么转换成jpg而不会降低质量

在苹果设备的世界里&#xff0c;随着 iOS 11 的推出&#xff0c;苹果引入了一种新的图像格式 - 高效图像编码&#xff08;High Efficiency Image Format, HEIF&#xff09;。当用户在 iPhone 或 iPad 上拍摄照片时&#xff0c;默认情况下&#xff0c;这些设备会保存图片为 HEIC…

软件测试——web单功能测试

工作职责&#xff1a; 1.负责产品系统测试&#xff0c;包括功能测试、性能测试、稳定性测试、用户场景测试、可靠性测试等。 2.负责测试相关文档的编写&#xff0c;包括测试计划、测试用例、测试报告等。 3.负责自动化测试框架、用例的维护。 岗位要求&#xff1a; 1.熟练…

达梦数据库系列—28. 主备集群高可用测试

目录 监视器关闭 监视器启动&#xff0c;Detach备库 主备正常&#xff0c;手动switchover 主库故障&#xff0c;自动switchover 主库故障&#xff0c;手动Takeover 主库故障&#xff0c;备库强制takeover 主库重启 备库故障 公网连接异常 主库私网异常 备库私网异常…

uniapp打包成Android时,使用uni.chooseLocation在App端显示的地址列表是空白?一直转圈的解决办法

问题描述&#xff1a; uniapp打包后的测试版app在ios里可以显示高德地图的定位列表&#xff0c;但是安卓手机却不显示定位列表&#xff0c;一直在转圈圈&#xff0c;怎么回事&#xff1f;之前的功能在正式版都能用&#xff0c;真机运行也能用&#xff0c;为什么测试版的安卓手…