问题描述:
Given two arrays, write a function to compute their intersection.
示例:
Given nums1 = [1, 2, 2, 1]
, nums2 = [2, 2]
, return [2, 2]
.
问题分析:
寻找两个数组共同的元素,可重复。可以利用map把nums1中的元素出现次数记录下来,跟nums2中的元素比较,出现一次,把该元素添加进结果集,map相应元素数目减一直到0。
过程详见代码:
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
vector<int> res;
map<int,int> m;
for(int i = 0; i < nums1.size(); i++)
{
if(m.count(nums1[i]) == 0)
{
m.insert(pair<int,int>(nums1[i],1));
}
else m[nums1[i]] += 1;
}
for(int i = 0; i < nums2.size(); i++)
{
if(m.count(nums2[i]) > 0 && m[nums2[i]] > 0)
{
res.push_back(nums2[i]);
m[nums2[i]] -= 1;
}
}
return res;
}
};