力扣题目
给定两个数组 nums1 和 nums2 ,返回 它们的 交集。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的
代码
思路分析:两种实现方式原理是一样的都是运行set容器或map容器插入的值唯一的特性。使用set容器实现起来更加简洁。
C++实现(set容器)
class Solution
{
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2)
{
set<int>s(nums1.begin(), nums1.end());/*拷贝构造*/
set<int>sTemp;/*存储交集元素*/
for(int i = 0; i < nums2.size(); i++)
{
set<int>::iterator pos = s.find(nums2[i]);
if(pos != s.end())/*交集的元素*/
{
sTemp.insert(*pos);
}
}
return vector<int>(sTemp.begin(), sTemp.end());
}
};
C++实现(map容器)
class Solution
{
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2)
{
vector<int>arr;/*存储交集的元素*/
map<int, int>m1;
map<int, int>temp;
for(int i = 0; i < nums1.size(); i++)
{
m1.insert(make_pair(nums1[i], i));
}
for(int i = 0; i < nums2.size(); i++)
{
map<int, int>::iterator pos = m1.find(nums2[i]);
if(pos != m1.end())/*交集的元素*/
{
temp.insert(make_pair(pos->first, pos->second));
}
}
for(map<int, int>::iterator it = temp.begin(); it != temp.end(); it++)
{
arr.push_back(it->first);
}
return arr;
}
};