两数组的交 II
计算两个数组的交
注意事项
每个元素出现次数得和在数组里一样
答案可以以任意顺序给出
样例
nums1 = [1, 2, 2, 1]
, nums2 = [2, 2]
, 返回 [2, 2]
.
解题思路:具体参照
两数组的交 ,只是在最后一步进行小的改动,发现两个数组有交的时候向向量里添入min(map1,map2),然后将一个map对应该数赋值为0即可。
解题代码:
class Solution {
public:
/**
* @param nums1 an integer array
* @param nums2 an integer array
* @return an integer array
*/
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
// Write your code here
map<int,int>s1,s2;
for(int i=0;i<nums1.size();i++)s1[nums1[i]]++;
for(int i=0;i<nums2.size();i++)s2[nums2[i]]++;
set<int>ans;
if(nums1.size()>nums2.size())
for(int i=0;i<nums2.size();i++){
if(min(s1[nums2[i]],s2[nums2[i]])>0){
ans.insert(nums2[i]);
s1[nums2[i]]--;
s2[nums2[i]]--;
}
}
else
for(int i=0;i<nums1.size();i++){
if(min(s1[nums1[i]],s2[nums1[i]])>0){
ans.insert(nums1[i]);
s1[nums1[i]]--;
s2[nums1[i]]--;
}
}
vector<int>ans1;
for
return ans;
}
};
public:
/**
* @param nums1 an integer array
* @param nums2 an integer array
* @return an integer array
*/
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
// Write your code here
map<int,int>s1,s2;
for(int i=0;i<nums1.size();i++)s1[nums1[i]]++;
for(int i=0;i<nums2.size();i++)s2[nums2[i]]++;
set<int>ans;
if(nums1.size()>nums2.size())
for(int i=0;i<nums2.size();i++){
if(min(s1[nums2[i]],s2[nums2[i]])>0){
ans.insert(nums2[i]);
s1[nums2[i]]--;
s2[nums2[i]]--;
}
}
else
for(int i=0;i<nums1.size();i++){
if(min(s1[nums1[i]],s2[nums1[i]])>0){
ans.insert(nums1[i]);
s1[nums1[i]]--;
s2[nums1[i]]--;
}
}
vector<int>ans1;
for
return ans;
}
};