题目连接: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;}
};