1.两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。输出结果中的每个元素一定是唯一的,可以不考虑输出结果的顺序。
考察知识点:哈希表
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> v;
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
set_intersection(nums1.begin(),nums1.end(),nums2.begin(),nums2.end(),back_inserter(v));
vector<int>::iterator vector_iterator;
vector_iterator = unique(v.begin(),v.end());
if(vector_iterator != v.end())
{
v.erase(vector_iterator,v.end());
}
return v;
}
};
或者
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> v;
unordered_set<int> hash1,hash2;
for(int i:nums1) hash1.insert(i);
for(int i:nums2)
{
if(hash1.count(i)>0&&hash2.count(i)==0)
v.push_back(i);
hash2.insert(i);
}
return v;
}
};
2.两个数组的交集 II
给定两个数组,编写一个函数来计算它们的交集。输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致,可以不考虑输出结果的顺序。
考察知识点:哈希表
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
vector<int> v;
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
set_intersection(nums1.begin(),nums1.end(),nums2.begin(),nums2.end(),back_inserter(v));
return v;
}
};
或者
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
vector<int> v;
unordered_map<int,int> mp;
for(int i:nums1) ++mp[i];
for(int i:nums2)
{
if(mp[i]>0)
{
v.push_back(i);
--mp[i];
}
}
return v;
}
};