【日常刷题】两个数组的交集

题目

【日常刷题】两个数组的交集_第1张图片

思路

先去重,后求交集
去重我们可以使用sort+unique进行去重
也可以直接使用set进行排序+去重一步到位

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        //排序加去重-方法一:
        // sort(nums1.begin(),nums1.end());
        // unique(nums1.begin(),nums1.end());

        //找交集:
        //1.不相等,小的++
        //2.相等,就是交集,同时++
        //3.一个集合走完就结束

        //找差集:
        //1.相等,同时++
        //2.不相等,小的就是差集,小的++
        //3.一个走完了,剩下没有走完的集合的值也是差集
        
        set<int> s1(nums1.begin(),nums1.end());
        set<int> s2(nums2.begin(),nums2.end());

        auto it1 = s1.begin();
        auto it2 = s2.begin();
        vector<int> v;
        while(it1 != s1.end() && it2 != s2.end())
        {
            if(*it1 < *it2)
            {
                it1++;
            }
            else if(*it1 > *it2)
            {
                it2++;
            }
            else{
                v.push_back(*it1);
                it1++;
                it2++;
            }
        }
        return v;
    }
};

找交集和差集的思想:

先排序加去重
找交集:
1.不相等,小的++
2.相等,就是交集,同时++
3.一个集合走完就结束
找差集:
1.相等,同时++
2.不相等,小的就是差集,小的++
3.一个走完了,剩下没有走完的集合的值也是差集

你可能感兴趣的:(算法)