给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4]
两个unordered_set 用法
unordered_set 是无序存放,但查找更加效率。
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> se1(nums1.begin(),nums1.end());
unordered_set<int> se2;
for(int i=0;i<nums2.size();i++)
{
if(se1.count(nums2[i])&&!se2.count(nums2[i]))
{
se2.insert(nums2[i]);
}
}
return vector<int>(se2.begin(),se2.end());
}
};
一个unordered_set 和vector
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> se1(nums1.begin(),nums1.end());
vector<int> vec;
for(int i=0;i<nums2.size();i++)
{
if(se1.erase(nums2[i]))
vec.emplace_back(nums2[i]);
}
return vec;
}
};
set_intersection求交集函数
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
set<int> se1(nums1.begin(),nums1.end());
set<int> se2(nums2.begin(),nums2.end());
vector<int> vec;
set_intersection(se1.begin(),se1.end(),se2.begin(),se2.end(),insert_iterator(vec,vec.begin()));
return vec;
}
};
排序sort和迭代
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
set<int> se;
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
vector<int>::iterator i=nums1.begin(),j=nums2.begin();
while(i!=nums1.end()&&j!=nums2.end())
{
if(*i==*j)
{
se.insert(*i);
i++;
j++;
}
else if(*i<*j)
{
i++;
}
else
j++;
}
return vector<int>(se.begin(),se.end());
}
};