哈希表 | LeetCode 349 两个数组的交集

48 阅读1分钟

题目描述

给定两个数组 nums1 和 nums2 ,返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

本题思路

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        unordered_set<int> result_set;
        unordered_set<int> set(nums1.begin(), nums1.end());
        for (int num : nums2) {
            if (set.find(num) != set.end()) {
                result_set.insert(num);
            }
        }
        return vector<int>(result_set.begin(), result_set.end());
    }
};

set解决 (set和multiset 底层实现是红黑树 unordered_set底层实现是哈希表)

利用unordered_set(无序,数值不可重复,插叙效率为O(1))

nums_set.find(num) != nums_set.end() .find()如果找到会返回指向容器中第一个元素的正向迭代器 否则返回指向容器中最后一个元素之后位置的正向迭代器

首先将数组中的元素转变为unordered_set 会自动去重,定义相同类型result来存放结果。以nums2中的元素为基准在nums1中查找,如果找到将之放入result,最后返回result(记得将类型转变成vector)