350. Intersection of Two Arrays II

思路:

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;
    }
};
posted @ 2021-04-11 23:42  Mrsdwang  阅读(24)  评论(0编辑  收藏  举报