349. 两个数组的交集

题目描述

给定两个数组,编写一个函数来计算它们的交集。

示例 1:

输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]

示例 2:

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]

说明:

  • 输出结果中的每个元素一定是唯一的。
  • 我们可以不考虑输出结果的顺序。

解题思路

使用哈希表统计一个数组中每个元素的出现次数,然后遍历另一个数组,找到与哈希表中相同元素,将其添加到结果集中。

C#代码实现

public int[] Intersection(int[] nums1, int[] nums2) {// 创建一个HashSet,用于存储nums1中的元素HashSet<int> set1 = new HashSet<int>(nums1);// 创建一个HashSet,用于存储nums2中的元素HashSet<int> set2 = new HashSet<int>();// 遍历nums2,如果nums1中包含nums2中的元素,则将其添加到set2中foreach (int num in nums2) {if (set1.Contains(num)) {set2.Add(num);}}// 返回set2中的元素return set2.ToArray();
}

C代码实现

int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){int* result = (int*)malloc(sizeof(int) * (nums1Size > nums2Size ? nums2Size : nums1Size));int resultSize = 0;int* set1 = (int*)malloc(sizeof(int) * nums1Size);int* set2 = (int*)malloc(sizeof(int) * nums2Size);int set1Size = 0;int set2Size = 0;// 构建哈希表 set1for (int i = 0; i < nums1Size; i++) {if (!contains(set1, set1Size, nums1[i])) {set1[set1Size++] = nums1[i];}}// 遍历数组 nums2,找到与 set1 中相同的元素,将其添加到 set2for (int i = 0; i < nums2Size; i++) {if (contains(set1, set1Size, nums2[i]) && !contains(set2, set2Size, nums2[i])) {set2[set2Size++] = nums2[i];}}// 将 set2 转为数组 resultfor (int i = 0; i < set2Size; i++) {result[resultSize++] = set2[i];}*returnSize = resultSize;return result;
}// 判断数组中是否包含某个元素
bool contains(int* arr, int size, int target) {for (int i = 0; i < size; i++) {if (arr[i] == target) {return true;}}return false;
}

时间复杂度和空间复杂度

  • 时间复杂度:O(m + n),其中 m 和 n 分别是数组 nums1 和 nums2 的长度。分别遍历两个数组一次。
  • 空间复杂度:O(m + n),其中 m 和 n 分别是数组 nums1 和 nums2 的长度。使用了两个哈希表。

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

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

相关文章

Docker容器如何优雅地访问宿主机网络

# 前言 某些时候&#xff0c;我们会有在容器内容访问宿主机某个服务的需求&#xff0c;比如现在 openai 无法直接访问&#xff0c;需要给项目添加代理&#xff0c;我的 chatgpt-dingtalk (opens new window) 项目支持了通过环境变量指定代理地址。 添加方式如下&#xff1a; …

嵌入式奇妙之旅:Python与树莓派编程深度探索

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 在这个数字化的时代&#xff0c;嵌入式系统的应…

主动学习与弱监督学习

人工智能数据的获取没有想象中的那么简单&#xff0c;虽然我们早已身处大数据的浪潮下&#xff0c;很多公司在获取数据的大浪中翻滚却始终没有找到一个合适的获取数据的渠道。很多情况下&#xff0c;获取高质量的人工智能数据需要消耗大量的人力、时间、金钱&#xff0c;但是对…

Vue3-08-条件渲染-v-if 的基本使用

v-if 是什么 v-if 一个指令&#xff0c; 它是用来根据条件表达式&#xff0c;进行选择性地【展示】/【不展示】html元素的。比如 &#xff1a; 有一个按钮A&#xff0c;当条件为真时&#xff0c;展示该按钮&#xff1b;条件为假时&#xff0c;不展示该按钮。与 js 中的 条件判…

绝地求生:PGC2023胜者组D2下半场:17天霸成功晋级,TL、NH跌入最后机会组

第四场 第一名&#xff1a;LGC 第二名&#xff1a;T5 第三名&#xff1a;FaZe 17仅剩两人&#xff0c;T5踩住高点&#xff0c;sujiu前顶时被T5架枪位击倒&#xff0c;小鬼的盾牌没能挡住对方的雷遗憾第五出局。然而T5自己也进圈不易&#xff0c;仅剩两人。 LG独狼卡住T5却忽…

Leetcode 2132. 用邮票贴满网格图(Java + 两次一维前缀和 + 二维差分)

Leetcode 2132. 用邮票贴满网格图&#xff08;Java 两次一维前缀和 二维差分&#xff09; 题目 给你一个 m x n 的二进制矩阵 grid &#xff0c;每个格子要么为 0 &#xff08;空&#xff09;要么为 1 &#xff08;被占据&#xff09;。给你邮票的尺寸为 stampHeight x sta…

Linux_Ubuntu 系统入门

Ubuntu 系统是和 Windows 系统一样的大型桌面操作系统&#xff0c;因此功能非常强大。 本节的目的是掌握后续嵌入式开发所需的 Ubuntu 基本技能&#xff0c;比如系统的基本设置、常用的 shell 命令、vim 编译器的基本操作等等…… Ubuntu 的图形化界面操作和 Windows 下基本一致…

数据分析基础之《matplotlib(3)—散点图》

一、常见图形种类及意义 1、matplotlib能够绘制折线图、散点图、柱状图、直方图、饼图。我们需要知道不同的统计图的意义&#xff0c;以此来决定选择哪种统计图来呈现我们的数据 2、折线图plot 说明&#xff1a;以折线的上升或下降来表示统计数量的增减变化的统计图 特点&…

使用Docker快速搭建一套三主三从Redis集群用于开发、测试

文章目录 一 基本概念二 部署流程2.1 准备配置文件2.2 启动6个 Docker 容器2.3 集群搭建 三 总结四 参考资料 一 基本概念 Redis集群是一种通过将多个Redis节点连接在一起以实现高可用性、数据分片和负载均衡的技术。它允许Redis在不同节点上同时提供服务&#xff0c;提高整体…

智能优化算法应用:基于白鲸算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于白鲸算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于白鲸算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.白鲸算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

实践干货 | CodeWave如何支持多人协作开发应用

在传统软件开发领域里&#xff0c;要完成具备一定复杂程度的软件&#xff0c;通常都会由一个研发团队协作开发。软件复杂度越大&#xff0c;研发团队的规模也就越大。 为了让研发团队能够高效的进行协同开发&#xff0c;业务引入了优秀的代码版本管理工具&#xff0c;比如传统软…

C语言union联合体(共用体)

一、定义 联合体&#xff08;共用体&#xff09;是一种特殊的自定义的数据类型&#xff0c;它包含一系列的成员变量&#xff0c;这些成员变量共用一块内存空间。 语法&#xff1a; union 标识符 { data_type 标识符1; data_type 标识符2; . . . dat…

linux面试题 Java工程师、C++工程师、iOS工程师、安卓工程师、运维工程师、PHP工程师、安全工程师、2020、golang工程师等面试可用

下列有关const限定符说法错误的是&#xff1a; A. 可以将一个非const对象的地址赋给一个指向const对象的指针B. 可以将一个非const对象的地址赋给一个指向非const对象的指针C. 一个const对象不可以被多次赋值D. 通过const对象指针可以改变全局const对象内容 正确答案&#xff1…

华为OD机试-内存冷热标记(JavaPythonJs)100%通过率

题意 现代计算机系统中通常存在多级的存储设备,针对海量workload的优化的一种思路是将热点内存页优先放到快速存储层级,这就需要对内存页进行冷热标记。 一种典型的方案是基于内存页的访问频次进行标记,如果统计窗口内访问次数大于等于设定闽值,则认为是热内存页,否则是冷…

第18节:Vue3 数组和集合的注意事项

在UniApp中使用Vue3框架时&#xff0c;处理数组和集合需要注意以下几点&#xff1a; 数组和集合的初始化&#xff1a;在Vue3中&#xff0c;可以使用ref()函数来创建一个响应式引用对象&#xff0c;然后使用该引用来初始化数组或集合。例如&#xff1a; import { ref } from vu…

【数组Array】力扣-5 最长回文子串

目录 题目描述 题解labuladong 题目描述 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab"…

MySQL:JSON语法说明

一、SELECT JSON_OVERLAPS([5261,5265], [5265,5278,1000]) -- 0不存在 1存在(比较两个数组是否有匹配) 二、SELECT JSON_CONTAINS([1,2,3,4,5,6,7], CAST(4 AS CHAR)) -- key是字符串类型&#xff08;比较字符串是否在数组中存在&#xff09; 三、JSON_EXTRACT(eas.question_…

在javaweb项目中resource目录和webapp目录的区别

resource存放的是一些配置文件&#xff0c;这些文件一般都是与java代码相关的配置文件&#xff0c;比如这里的jdbc配置文件,在java中可以使用这个目录下的文件&#xff0c;不用写全路径 webapp存放的是web的资源文件&#xff0c;如jsp,html,css&#xff0c;js文件,在网页请求会…

Golang 链表的创建和读取 小记

文章目录 链表的相关知识链表的创建:模拟方式建立链表的**递归创建** 链表的读取遍历读取递归读取 完整代码 链表的相关知识 链表有时会具有头节点&#xff0c;头节点的指针指向第一个节点的地址&#xff0c;其本身的数据域可以根据自己的选择进行赋值   接下来我将以将int转…

【NSX-T】5. 搭建NSX-T环境 —— NSX架构基础配置

目录 5. 准备 NSX 基础架构5.1 准备工作5.2 创建传输域&#xff08;1&#xff09;创建 Overlay 传输域&#xff08;2&#xff09;创建 VLAN 传输域 5.3 创建 IP 池5.4 准备 ESXi 主机 参考资料 5. 准备 NSX 基础架构 5.1 准备工作 vCenter 中已存在 DVS。 为 NSX-T 创建两个 …