力扣第350题 两个数组的交集II 不会unordered_map c++注释版教懂你
题目
简单
给你两个整数数组 nums1
和 nums2
,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。
示例 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 <= nums1.length, nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 1000
思路和解题方法
- 首先,代码通过比较数组
nums1
和nums2
的长度,如果nums1
的长度大于nums2
,则交换它们的位置,确保nums1
是较短的数组。
- 然后,代码创建一个无序哈希映射
map
,用于统计数组nums1
中每个元素的出现次数。遍历nums1
数组,对于每个遍历到的元素num
,将其作为键,在map
中进行查找,如果存在,则将对应值加一;如果不存在,则添加该键并将对应值设为 1。
- 接下来,代码创建一个空数组
ans
,用于存储两个数组的交集元素。
- 然后,代码遍历
nums2
数组,对于每个遍历到的元素num
,在map
中查找是否存在该元素。如果存在,说明该元素是两个数组的交集元素,将其添加到ans
数组中,并将map
中对应的值减一。如果map
中对应的值减到了 0,表示该元素在nums1
中已经没有剩余出现次数,因此将其从map
中移除。
- 最后,代码返回存储交集元素的数组
ans
。
复杂度
时间复杂度:
O(n1+n2)
时间复杂度:
- 哈希表的构建遍历了
nums1
数组,时间复杂度为 O(n1),其中 n1 是nums1
数组的长度。- 在遍历
nums2
数组时,对于每个元素,都需要在哈希表中进行查找操作,时间复杂度为 O(1)(平均情况下),总共需要遍历nums2
数组,时间复杂度为 O(n2),其中 n2 是nums2
数组的长度。- 综上所述,总的时间复杂度为 O(n1 + n2)。
空间复杂度
O(n) n为小的vector
空间复杂度:
- 创建了一个哈希表
map
来存储nums1
数组中元素的出现次数,其中存储的键值对数量最多不会超过nums1
数组的长度,因此空间复杂度为 O(n1)。- 创建了一个存储交集元素的数组
ans
,最多需要存储min(n1, n2)
个元素,因此空间复杂度为 O(min(n1, n2))。- 综上所述,总的空间复杂度为 O(n1)。
c++ 代码
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
if(nums1.size()>nums2.size())
return intersect(nums2,nums1); //如果nums1的长度大于nums2,则交换它们,确保nums1是较短的数组
unordered_map<int,int> map; //创建一个无序映射map,用于统计nums1中每个元素的出现次数
for(int num:nums1)
map[num]++; //将num作为键,通过自增操作更新对应的值,即num在nums1中出现的次数
vector<int> ans; //创建一个存储交集元素的数组ans
for(int num: nums2)
{
if(map.count(num)) //判断num是否存在于map中,即判断num是否在nums1中出现过
{
ans.push_back(num); //将num加入到ans中
map[num]--; //将map中num对应的值减一,保证交集中元素的重复次数与两个数组中相应元素的重复次数一致
{
if(map[num]==0)
map.erase(num); //如果map[num]为0,表示num在nums1中已经没有剩余出现次数,从map中移除该键
}
}
}
return ans; //返回存储交集元素的数组ans
}
};
觉得有用的话可以点点赞,支持一下。
如果愿意的话关注一下。会对你有更多的帮助。
每天都会不定时更新哦 >人< 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)