力扣349两个数的交集

题目连接: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中如下

力扣349两个数的交集_第1张图片
遍历两个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;
    }
};

你可能感兴趣的:(力扣,leetcode,算法,职场和发展)