题目连接:349. 两个数组的交集 - 力扣(LeetCode)
给定两个数组 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将vector中的元素存放到set中,做到去重和排序的目的。
比如示例2:存放到set中如下
遍历两个set容器 如果两个容器中有相同的元素值就添加到结果集当中。不相等让值小的先走进行判断
class Solution
{
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2)
{
vector<int> ret;
if(nums1.empty() || nums2.empty())
{
return ret;
}
//将num1和num2中的元素存到set中达到排序+去重的目的
set<int> set1,set2;
for(auto& e: nums1)
{
set1.insert(e);
}
for(auto& e : nums2)
{
set2.insert(e);
}
//此时set1和set2中的元素已经有序且唯一
auto set1_it = set1.begin();
auto set2_it = set2.begin();
//遍历set确定交集
while(set1_it != set1.end() && set2_it != set2.end())
{
if(*set1_it < *set2_it)
{
set1_it++;
}
else if(*set1_it > *set2_it)
{
set2_it++;
}
else
{
ret.push_back(*set1_it);
set1_it++;
set2_it++;
}
}
return ret;
}
};