leetcode

349. 两个数组的交集 -> set

力扣链接

题目给定nums长度有限小于1000,可用array
class Solution {
public:
    std::vector<int> intersection(std::vector<int>& nums1, std::vector<int>& nums2) {
        std::unordered_set<int> res;
        int hash[1005] = {0};
        for (int i:nums1) hash[i]=1;
        for (int i:nums2) if(hash[i]==1) res.insert(i);
        // 等价于 std::vector<int> ress (res.begin(), res.end()); return ress;
        return std::vector<int> (res.begin(), res.end());
    }
};
通用解法 set
class Solution {
public:
    std::vector<int> intersection(std::vector<int>& nums1, std::vector<int>& nums2) {
        // 把向量转化成无序集合
        std::unordered_set num1set(nums1.begin(), nums1.end());
        std::unordered_set<int> res;
        // 错误if(nums1set.find(i)) find查找返回的是指针 不是布尔值
        for (int i: nums2) if(num1set.find(i)!=num1set.end()) res.insert(i);
        // 把无序集合转化成向量
        return std::vector<int> (res.begin(), res.end());
    }
};