2021/5/23 LeetCode 两个数组的交集 II

题源:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2y0c2/

题解一:使用unordered_map函数,将nums1中的数组元素作为key,数量作为value,构建m;然后遍历nums2中的元素,以每个元素作为目标在m中进行查找,若找到且值还大于或等于1,则将该元素作为结果存储在nums1中。(可以去题源看官方解答,此题也是看得解析)

代码 :

class Solution {
public:
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
        if(nums1.size()>nums2.size()){
            return intersect(nums2,nums1);///方法名叫intersect,是递归调用了这个方法本身而不是其他的三方函数
        }
        unordered_map<int,int>m;
        for(auto n:nums1){
            m[n]++;
        }
        int k=0;
        for(auto x:nums2){
            auto itera=m.find(x);
            if(itera!=end(m)&&--itera->second>=0){
                nums1[k++]=x;
            }
        }
        return vector(begin(nums1),begin(nums1)+k);
    }
};

题解二:

代码:先对两个数组进行排序,然后使用双指针对两个数组进行遍历,实现细节看代码。

class Solution {
public:
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
        if(nums1.size()>nums2.size()){
            return intersect(nums2,nums1);
        }
        sort(nums1.begin(),nums1.end());
        sort(nums2.begin(),nums2.end());
        int k=0;
        for(int i=0,j=0;i<nums1.size()&&j<nums2.size();){
            if(nums1[i]==nums2[j]){
                nums1[k++]=nums1[i];
                i++;j++;
            }
            else if(nums1[i]<nums2[j]){
                i++;
            }
            else{
                j++;
            }
        }
        return vector(begin(nums1),begin(nums1)+k);
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会敲代码的小帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值