LeetCode算法题解 350-两个数组的交集 II

题目描述

题解:

这道题有个简单版本,都是求出两个数组的交集(I不管出现的次数),而II考虑次数,比如样例1[1,2,2,1]、[2,2],不考虑次数那么2就是唯一的交集元素,考虑次数那么2在两个数组都出现了两次,所以就是[2,2],再看样例2,[4,9,5]、[9,4,9,8,4],4和9都在数组1中出现了1次,而在数组2中出现了2次,取较小次数,所以就是[4,9]。
我的思路就是,一个数组对应一个map,记录下每个值出现的次数,然后开个两层循环遍历两个map,如果值相同,说明有交集元素,然后取较小次数,最后按照较小次数将该值添加到res数组即可。

代码

class Solution {
public:
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
        vector <int> res;
        map <int,int> mp1,mp2;
        for(int i = 0; i < (int)nums1.size(); i++)
        {
            mp1[nums1[i]]++;
        }
        for(int i = 0; i < (int)nums2.size(); i++)
        {
            mp2[nums2[i]]++;
        }
        for(auto it1 = mp1.begin(); it1 != mp1.end(); it1++)
        {
            for(auto it2 = mp2.begin(); it2 != mp2.end(); it2++)
            {
                if(it1->first == it2->first)
                {
                    int minV = min(it1->second,it2->second);
                    for(int i = 1; i <= minV; i++)
                    {
                        res.push_back(it1->first);
                    }
                }
            }
        }
        return res;
    }
};
发布了197 篇原创文章 · 获赞 18 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41708792/article/details/104336255
今日推荐