养老网站备案必须做前置审批吗,网页正在跳转中,苏州专业高端网站建设网络公司,河南洛阳网站建设想到的解法是使用两个map来进行记录#xff0c;mp1用来统计num1中每个元素出现的次数。当nums2的元素能够在mp1中查找到时#xff0c;将这个元素添加到mp2#xff0c;按照这个规则统计得到nums2和nums1重复的元素#xff0c;mp2中的value记录了nums2中这个元素出现的次数最…想到的解法是使用两个map来进行记录mp1用来统计num1中每个元素出现的次数。当nums2的元素能够在mp1中查找到时将这个元素添加到mp2按照这个规则统计得到nums2和nums1重复的元素mp2中的value记录了nums2中这个元素出现的次数最后我们只需要将两个map同一键值的value取最小值并添加最小值个数个键值元素到返回数组即可
class Solution {
public:vectorint intersect(vectorint nums1, vectorint nums2) {vectorint v;unordered_mapint, int mp1;unordered_mapint, int mp2;for(int i 0; i nums1.size(); i){mp1[nums1[i]];}for(int j 0; j nums2.size(); j){if(mp1.find(nums2[j]) ! mp1.end()){mp2[nums2[j]];}}for(auto pair : mp2){int num min(mp2[pair.first], mp1[pair.first]);for(int i 0; i num; i){v.push_back(pair.first);}}return v;}
};看了官方的题解在插入到返回数组的处理更加简便减少了for循环进行对比在此之前没怎么用过**map.count()**这个函数。
class Solution {
public:vectorint intersect(vectorint nums1, vectorint nums2) {if (nums1.size() nums2.size()) {return intersect(nums2, nums1);}unordered_map int, int m;for (int num : nums1) {m[num];}vectorint intersection;for (int num : nums2) {if (m.count(num)) {intersection.push_back(num);--m[num];if (m[num] 0) {m.erase(num);}}}return intersection;}
};作者力扣官方题解
链接https://leetcode.cn/problems/intersection-of-two-arrays-ii/solutions/327356/liang-ge-shu-zu-de-jiao-ji-ii-by-leetcode-solution/
来源力扣LeetCode