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());
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值