【leetcode】【c++】350. 两个数组的交集 II

给定两个数组,编写一个函数来计算它们的交集。

 

示例 1:

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]
示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]
 

说明:

输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。
我们可以不考虑输出结果的顺序。

 

class Solution {
public:
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
        if (nums1.size() > nums2.size()) // 1.减少空间复杂度,先遍历短的
            return intersect(nums2, nums1);
        
        unordered_map<int, int> hashtable;
        for (int num: nums1) {
            // if (hashtable.find(num) != hashtable.end())
            //     hashtable[num] += 1;
            // else
            //     hashtable[num] = 1;
            hashtable[num] += 1; // 2.C++对map的[]操作符做了控制,key不存在时用默认值,所以可直接取
        }
        vector<int> res;
        for (int num: nums2) {
            if (hashtable.find(num) != hashtable.end()) {
                res.push_back(num);
                hashtable[num] -= 1;
                if (hashtable[num] == 0) // 3.如果已经0次删除掉,不然还会找到
                    hashtable.erase(num);
            }
        }
        return res;
    }
};

 

posted @ 2021-11-11 10:02  AliceYing  阅读(42)  评论(0编辑  收藏  举报