当前位置:网站首页>两个数组的交集

两个数组的交集

2022-08-10 23:53:00 老鱼37

![在这里插入图片描述](https://img-blog.csdnimg.cn/8f978cc351c64e748910179903f1ad30.png)
****思路:
****第一种:
开辟一个新的数组,拿一个数组里面的每一个元素跟另一个数组比较,如果在另一个数组里面能找到的话将把重复的放入新的数组里面。**
****第二种:既然我们学过了unordered_set  我们就应该运用他的性质  ------不会包含重复的元素。****
1.将数组一元素放入unordered_set容器
2.创建一个set<int>容器  再用for(auto &ch:num2)遍历数组而,如果unordered_set中能够找到nums2中相应的元素,就把它放入set中
然后再用新数组接收set中的元素,返回这个新数组就行了********

**

class Solution {
    
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
    
        unordered_set<int>m(nums1.begin(),nums1.end());
        set<int>p;
        for(auto &ch:nums2)
        {
    
            if(m.count(ch))
            {
    
                p.insert(ch);
            }
        }
        vector<int>k(p.begin(),p.end());
         return k;
    }
};
第三种:使用迭代器双指针的方法:
两个数组分别用set接收,set已经对数组元素大小排好序了,创建一个新数组,然后对两个set容器中的元素进行比较即可,相同的入,不同的跳

**

class Solution {
    
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
    
        set<int>v1(nums1.begin(),nums1.end());
        set<int>v2(nums2.begin(),nums2.end());
        vector<int>ans;
        auto it1=v1.begin();
        auto it2=v2.begin();
        while(it1!=v1.end()&&it2!=v2.end())
        {
    
            if(*it1<*it2)
            {
    
                it1++;
            }
            else if(*it1>*it2)
            {
    
                it2++;
            }
            else
            {
    
                ans.push_back(*it1);
                it1++;
                it2++;
            }
        }
        return ans;
    }
};

有人就疑惑为什么要用set接收呢?不能用vector接收吗?
解:因为nums2中可能会出现重复出现的元素,比如nums2中有两个2,那么它就会把两个2都放进vector中,用set的好处是放入的元素不会重复。

如有错误,多多指教!

原网站

版权声明
本文为[老鱼37]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_61342044/article/details/126268245