利用unordered_map特性求交集

unordered_map 是关联容器,含有带唯一键的键-值 pair 。搜索、插入和元素移除拥有平均常数时间复杂度。

元素在内部不以任何特定顺序排序,而是组织进桶中。元素放进哪个桶完全依赖于其键的哈希。这允许对单独元素的快速访问,因为一旦计算哈希,则它准确指代元素所放进的桶。

让我们看下原题:
给定两个数组,编写一个函数来计算它们的交集。

Example 1:

Input: nums1 = [1,2,2,1], nums2 = [2,2]
Output: [2,2]

Example 2:

Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
Output: [4,9]

注意:

结果中的每个元素应该出现在两个数组中显示的次数。
结果可以是任何顺序。

优化:

如果给定的数组已经排序怎么办? 你会如何优化你的算法?
如果nums1的尺寸与nums2的尺寸相比较小怎么办? 哪种算法更好?
如果nums2的元素存储在磁盘上,并且内存有限,以致您无法一次将所有元素加载到内存中,该怎么办?

代码分析:

class Solution {
public:
    vector<int> intersect(vector<int>& a, vector<int>& b) {
        unordered_map<int, int> ctr;
        for (int i : a)
            ctr[i]++;
        vector<int> out;
        for (int i : b)
            if (ctr[i]-- > 0)
                out.push_back(i);
        return out;
    }
};


 

猜你喜欢

转载自blog.csdn.net/weixin_40539125/article/details/86032160