首页 > 其他 > 详细

350. Intersection of Two Arrays II

时间:2021-04-12 09:19:05      阅读:25      评论:0      收藏:0      [点我收藏+]

思路:

hash_map存入一个数组的元素并计数,然后再遍历另一个数组如果hash_map存在这个元素,并且还没被减到0,那么就添加进res结果数组中并将hash_map计数减一。
代码:

class Solution {
public:
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
        unordered_map<int,int> mp;
        vector<int> res;
        for(auto& num:nums1){
            mp[num]++;
        }
        for(auto& num:nums2){
            if(mp.count(num)&&mp[num]!=0) {res.push_back(num);mp[num]--;}
        }
        return res;
    }
};

另一种如果我们排序,通过两个指针来判断两个指针指向的数是否相等,因为已经是升序排序了,所以从第一个元素开始比较,如果相等就加入res,并且两个指针都右移,如果不等,那就让值小的指针右移,因为可能大的数存在相等的。
代码:

class Solution {
public:
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
        sort(nums1.begin(),nums1.end());
        sort(nums2.begin(),nums2.end());
        vector<int> res;
        int p1=0,p2=0;
        int n1=nums1.size();
        int n2=nums2.size();
        while(p1<n1&&p2<n2){
            if(nums1[p1]==nums2[p2]) {
                res.push_back(nums1[p1]);
                p1++;
                p2++;
            }
            else if(nums1[p1]>nums2[p2]) p2++;
            else if(nums1[p1]<nums2[p2]) p1++;
        }
        return res;
    }
};

350. Intersection of Two Arrays II

原文:https://www.cnblogs.com/Mrsdwang/p/14646174.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!