欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

349. Intersection of Two Arrays

程序员文章站 2022-07-15 10:46:31
...

349. Intersection of Two Arrays
349. Intersection of Two Arrays

   vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        set<int> res,s(nums1.begin(),nums1.end());
        for(auto a:nums2){
            if(s.count(a))
                res.insert(a);
        }
        return vector<int>(res.begin(),res.end());
    }

set.count()返回0或者1,用来判断set中是否存在某一键值。
c++中的set

    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        vector<int> res;
        sort(nums1.begin(),nums1.end());
        sort(nums2.begin(),nums2.end());
        int i=0,j=0;
        while(i<nums1.size()&&j<nums2.size()){
            if(nums1[i]>nums2[j])
                j++;
            else if(nums1[i]<nums2[j])
                i++;
            else {
                if(res.empty()||res.back()!=nums1[i])          
                res.push_back(nums1[i]);        
                i++;j++;
            }
        }
        return res;
    }

利用STL的set_intersection()函数。

  vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        set<int> n1(nums1.begin(),nums1.end()),n2(nums2.begin(),nums2.end()),res;
        set_intersection(n1.begin(),n1.end(),n2.begin(),n2.end(),inserter(res,res.begin()));
        return vector<int>(res.begin(),res.end());
    }

set并或交集运算
利用二分法做,对nums1排序。从nuns2中依次取出值用二分法看能否在nums1找到,能找到放入set中。

    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        sort(nums1.begin(),nums1.end());
        set<int> res;
        for(auto a:nums2){
            int left=0,right=nums1.size()-1;
            while(left<=right){
                int mid=left+(right-left)/2;
                if(a<nums1[mid])
                    right=mid-1;
                else if(a>nums1[mid])
                    left=mid+1;
                else
                {
                     res.insert(a);
                    break;
                }
            }
        }
        return vector<int>(res.begin(),res.end());
    }