c++如何解决两个数组的交集问题
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章主要为大家展示了"c++如何解决两个数组的交集问题",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"c++如何解决两个数组的交集问题"这篇文章吧。一、
千家信息网最后更新 2025年02月23日c++如何解决两个数组的交集问题
这篇文章主要为大家展示了"c++如何解决两个数组的交集问题",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"c++如何解决两个数组的交集问题"这篇文章吧。
一、题目描述
给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。我们可以不考虑输出结果的顺序。
二、解题思路
(1) 哈希表查找
解题思路:
用哈希表记录一个数组中每个元素出现的次数,myMap{元素:元素出现次数}
遍历另一个数组,当哈希表中存在当前元素时,则对应元素的计数减1,并将该元素存入res中。
C++实现如下:
class Solution { public:vectorintersect(vector & nums1, vector & nums2) { if(nums1.empty() || nums2.empty()) return{ };// 哈希表记录集合中每个元素出现的次数unordered_map myMap;for( auto &num : nums1 ) myMap[num]++; vector res;// 遍历数组2for( int i = 0; i < nums2.size(); ++i ){ // 判断数组2和集合1是否有公共元素if( myMap.count(nums2[i]) ){ // 找到后,则对应的元素次数减1if( myMap[nums2[i]] > 0 )res.emplace_back(nums2[i]);// 减少集合1中该数的次数myMap[nums2[i]]--;}}return res;}};
运行结果:
复杂度分析:
时间复杂度:使用了两个for()循环,且是前后关系,因此整体的时间复杂度是O(n+m),其中 m 和 n 分别是两个数组的长度
空间复杂度:新定义了一个集合myMap来存储数组nums1中的元素,所以空间复杂度也是O(n)或O(m)
(2) 排序+双指针
解题思路:
首先对两个数组进行排序,然后使用两个指针遍历两个数组
初始时,两个指针分别指向两个数组的头部,每次比较两个指针指向的两个数组中的数字
如果两个数字不相等,则将指向较小数字的指针右移一位,如果两个数字相等,将该数字添加到答案,并将两个指针都右移一位。
当至少有一个指针超出数组范围时,遍历结束。
C++实现如下:
class Solution { public:vectorintersect(vector & nums1, vector & nums2) { //排序sort(nums1.begin(), nums1.end());sort(nums2.begin(), nums2.end());//获取数组长度int len1 = nums1.size();int len2 = nums2.size();//初始指针int index1=0, index2=0;vector res;while(index1 nums2[index2])index2++;//如果元素值大小相同,则双指针都向后移动一位,且将当前值存入reselse{ res.push_back(nums1[index1]);index1++;index2++;}}return res;}};
运行结果:
复杂度分析:
时间复杂度:O(mlogm+nlogn),其中 m 和 n 分别是两个数组的长度。对两个数组进行排序的时间复杂度是 O(mlogm+nlogn),遍历两个数组的时间复杂度是 O(m+n),因此总时间复杂度是 O(mlogm+nlogn)。
空间复杂度:除了输出的数组res,没有创建额外的中间数组,空间复杂度为O(1)
以上是"c++如何解决两个数组的交集问题"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
数组
两个
元素
复杂
复杂度
指针
时间
次数
数字
输出
交集
空间
结果
哈希
排序
问题
c++
内容
思路
指向
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
oracle连接数据库连接
加快软件开发最有效的方法
小米路由器怎么改成服务器
云上城之歌有混合服务器么
江苏企业软件开发诚信服务
软件开发实习自带电脑
参考工具书集成数据库
修改数据库表的字段名字
sqf语言操作数据库
教育局网络安全具体职能
网络安全检查小组组长职责
软件开发实现思路
国内网络安全公司哪个待遇好
调用接口json存入数据库
克伦邦帕安市网络安全
企业上市网络安全
服务器在安全区域
计算机三级网络技术报名要求
我们不得不重新思考网络安全
路由器上网显示服务器异常
java 多线程数据库
网络安全和信息化方面的工作
acc数据库介绍
手机能查看网关及dns服务器吗
厦门共享干衣机软件开发
数据库好考吗
网络技术小视频
社区居民数据库多色可选
att网络安全人员
深圳股票自动交易软件开发