解题思路
1.哈希表存储这个数字出现的次数
2.遍历第一个数组,哈希表记录每个数字和他出现的次数
3.遍历第二个数组,如果哈希表中存在这个数字,把这个数字记录在答案中,并减少哈希表中该数字出现的次数
4.为了降低空间复杂度,先遍历短的数组
count()方法返回值是一个整数,1表示有这个元素,0表示没有这个元素
代码
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
if(nums1.size() > nums2.size()){//比较数组大小,先遍历短的
return intersect(nums2,nums1);//如果数组1长度大于数组2,交换两个数组
}
unordered_map <int,int> m;//定义哈希表
for(int num : nums1){//遍历数组1
++m[num];//哈希表记录每个数字和他出现的次数
}
vector<int> v;//定义一个返回容器
for(int num : nums2){//遍历数组2
if(m.count(num)){//如果哈希表中存在这个数字
v.push_back(num);//把这个数字记录在答案中
--m[num];//并减少哈希表中该数字出现的次数
if(m[num] == 0){//如果哈希表中次数减少为零
m.erase(num);//删掉这个数
}
}
}
return v;//返回交集数组
}
};