力扣刷题六:两个数组的交集

题目

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

示例 1:

输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]
示例 2:

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]
说明:

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

思路

这道题目的思路就是一个个比较两个容器的元素,如图
力扣刷题六:两个数组的交集_第1张图片
但是有一个地方值得注意的是,当第一个容器中的4已经和第二个容器的4配对了之后,我们应该结束4这个元素的比较,为什么呢?因为不能计重复的元素
力扣刷题六:两个数组的交集_第2张图片
如上图所示,4匹配之后,就应该轮到5去进行遍历。这是一个值得注意的地方

代码


class Solution {
public:
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
     vector<int>v3;
        if(nums1.size() <=0 || nums2.size()<=0)
            return v3;
        int i = 0;
        int j = 0;
        double x = 0;
        int h = nums1.size()+nums2.size();
        double arr[h];
        int t = 0;

        for (i = 0; i < nums1.size(); i++)
        {

            for (j=0; j < nums2.size(); j++)
            {
            //如果第一个容器的元素和第二个容器元素相等
               if (nums1.at(i) == nums2.at(j))
                {
                    arr[t] = nums1.at(i);
                    //删除第二个容器的这个元素,以免被第一个容器重复匹配
                    nums2.erase(nums2.begin() + j);
                    t++;
                    //跳出这个循环,第一个容器的下一个元素开始进行遍历
                    break;
                }
            }
        }
        v3.resize(t);

        for (i = 0; i < t; i++)
        {
            v3[i] = arr[i];
        }
        return v3;
    }
};



注意

这道题目注意的地方在于不能重复匹配元素,第一个容器匹配到了相同元素的时候, 应该把第二个容器中的这个元素删除,以免第一个容器进行重复匹配。

你可能感兴趣的:(力扣刷题)