代码题(21)— 两数组交集

Posted eilearn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码题(21)— 两数组交集相关的知识,希望对你有一定的参考价值。

1、349. 两个数组的交集

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

例子:

 给定 num1[1, 2, 2, 1]nums2 = [2, 2], 返回 [2].

提示:

  • 每个在结果中的元素必定是唯一的。
  • 我们可以不考虑输出结果的顺序。

  这道题让我们找两个数组交集的部分(不包含重复数字),难度不算大,我们可以用个set把nums1都放进去,然后遍历nums2的元素,如果在set中存在,说明是交集的部分,加入结果的set中,最后再把结果转为vector的形式即可:

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        vector<int> res;
        if(nums1.empty() || nums2.empty())
            return res;
        unordered_set<int> s(nums1.begin(), nums1.end());
        unordered_set<int> temp;
        for(int val : nums2)
        {
            if(s.count(val))
                temp.insert(val);
        }
        return vector<int>(temp.begin(), temp.end());
    }
};

 

2、350. 两个数组的交集 II

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

例如:
给定 nums1 = [1, 2, 2, 1]nums2 = [2, 2], 返回 [2, 2].

注意:

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

这道题是之前那道Intersection of Two Arrays的拓展,不同之处在于这道题允许我们返回重复的数字,而且是尽可能多的返回,之前那道题是说有重复的数字只返回一个就行。那么这道题我们用哈希表来建立nums1中字符和其出现个数之间的映射, 然后遍历nums2数组,如果当前字符在哈希表中的个数大于0,则将此字符加入结果res中,然后哈希表的对应值自减1,

class Solution {
public:
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
        vector<int> res;
        if(nums1.empty() || nums2.empty())
            return res;
        unordered_map<int, int> m;
        for(int val : nums1)
            m[val]++;
        for(int val : nums2)
        {
            if(m[val] > 0)
            {
                m[val]--;
                res.push_back(val);
            }
                
        }
        return res;
    }
};

 


以上是关于代码题(21)— 两数组交集的主要内容,如果未能解决你的问题,请参考以下文章

力扣算法JS LC [349. 两个数组的交集] LC [202. 快乐数]

java数组的交集和并集

Leetcode练习(Python):第350题:两个数组的交集 II:给定两个数组,编写一个函数来计算它们的交集。

Leetcode练习(Python):第350题:两个数组的交集 II:给定两个数组,编写一个函数来计算它们的交集。

回顾面试题:计算两个数组交集

刷题笔记(数组)-08