给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
map<int,int> m,m1;
vector<int> res;
for( int i = 0 ; i<= nums1.size()-1;i++)
{
m[nums1[i]]=1;
if(m1.count(nums1[i])!=1)
{
m1[nums1[i]]=1;
}
else
{
m1[nums1[i]]++;
}
}
for( int i = 0 ; i <= nums2.size()-1;i++)
{
if(m.count(nums2[i])==1)
m[nums2[i]]++;
}
for (auto it = m.begin(),it2=m1.begin(); it != m.end(); it++,it2++)
{
if(it->second > 1)
{
if(it2->second < it->second )
{
for(int i =0;i< it2->second;i++)
{res.push_back(it2->first);}
}
else
{
for(int i =0;i < it->second-1;i++)
{res.push_back(it->first);}
}
}
}
return res;
}
};
思路:
一直想套用之前的就少做点,结果更麻烦了,用了两个map,一个存储第nums1的元素和次数,一个用来比对,然后再两个map比较下次数的大小再循环输出就行了,其实可以用一个map实现,用不去递增,而去递减。