LeetCode 350. 两个数组的交集 II Intersection of Two Arrays II

Posted zsy-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 350. 两个数组的交集 II Intersection of Two Arrays II相关的知识,希望对你有一定的参考价值。

技术图片

 

进阶解法1:排序双指针

class Solution {
public:
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {

        sort(nums1.begin(), nums1.end());
        sort(nums2.begin(), nums2.end());

        int p1 = 0, p2 = 0, index = 0;
        while(p1 < nums1.size() && p2 < nums2.size())
        {
            if (nums1[p1] < nums2[p2])
                ++p1;
            else if (nums1[p1] > nums2[p2])
                ++p2;
            else
            {
                nums1[index++] = nums1[p1++];  //nums1的值不会被多余覆盖
                ++p2;
            }
        }
        return vector(nums1.begin(), nums1.begin() + index);
    }
};

 

进阶解法2、3:将小一些的数组存储成哈希表后在长数组上遍历。

class Solution {
public:
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
        if (nums1.size() > nums2.size())  //nums1较大, 交换数组
            return intersect(nums2, nums1);

        unordered_map<int, int> hash;
        for (int num : nums1)
            ++hash[num];
        
        int index = 0;
        for (int num : nums2)
        {
            if (hash.count(num) && --(hash[num]) >= 0)
                nums1[index++] = num;
        }
        return vector(nums1.begin(), nums1.begin() + index);
    }
};

 

以上是关于LeetCode 350. 两个数组的交集 II Intersection of Two Arrays II的主要内容,如果未能解决你的问题,请参考以下文章

leetcode350 两个数组的交集 II (Easy)

两个数组的交集 II [ LeetCode - 350 ]

[JavaScript 刷题] 哈希表 - 两个数组的交集 II,leetcode 350

leetcode-350- 两个数组的交集 II

LeetCode350. 两个数组的交集 II

LeetCode:350. 两个数组的交集 II(python,JavaScript)