题目描述:
给定两个数组 nums1
和 nums2
,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
使用 unordered_set容器
可以给结果去重,因为set容器里面不会出现重复元素
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int>set;
unordered_set<int>ans_set;
vector<int>ans;
for(int i=0;i<nums1.size();i++)
{
set.insert(nums1[i]);
}
for(int i=0;i<nums2.size();i++)
{
if(set.find(nums2[i])!=set.end())
ans_set.insert(nums2[i]);
}
return vector<int>(ans_set.begin(),ans_set.end());
}
};
验证一下set 容器会不会出现重复元素
int main()
{
vector<int>nums1;
unordered_set<int>set;
nums1.push_back(1);
nums1.push_back(2);
nums1.push_back(2);
nums1.push_back(1);
for (int i = 0; i < nums1.size(); i++)
{
set.insert(nums1[i]);
}
for (int i = 0; i < nums1.size(); i++)
{
cout << nums1[i] << " ";
}
cout << endl;
for (auto it=set.begin();it!=set.end();it++)
{
cout << *it << " ";
}
}
输出
代码随想录里面的代码语句比较简洁
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int>set(nums1.begin(), nums1.end());
unordered_set<int>ans_set;
for(int num: nums2) //等同于for(int num=0;num<nums2.size;num++) {num=nums2[i];}
{
if(set.find(num)!=set.end())
{
ans_set.insert(num);
}
}
return vector<int>(ans_set.begin(),ans_set.end());
}
};