【c++】【leetcode349】求两个数组交集,用set实现

这篇博客介绍了如何利用C++中的unordered_set高效地找出两个整数数组的交集。通过将一个数组的元素插入到set中,然后遍历另一个数组,检查每个元素是否在set中,将交集元素存入新的unordered_set。最后将结果set转换为vector并返回。这种方法避免了重复元素,实现了简洁的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解题思路

求解两个数组的交集很简单,该题解是学习如何写优秀的代码。
在这里插入图片描述

代码

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        unordered_set<int> result_num;
        //set的初始化,迭代器or地址初始化,如果set提前定义可以用insert初始化
        unordered_set<int> nums_set(nums1.begin(),nums1.end());
        for(int x:nums2){
            if(nums_set.find(x)!=nums_set.end()){//set调用find函数,查找某一个值是否在set中
                result_num.insert(x);
            }
        }
        //把set转化为vector返回
        return vector<int>(result_num.begin(),result_num.end());
    }
};
<think>好的,我现在需要帮助用户找到如何使用Lodash.js获取两个数组交集的例子。首先,我得回想一下Lodash库的相关方法。记得Lodash有一个名为_.intersection的函数,可以处理数组交集问题。但用户的具体需可能是什么?他们可能想要基本用法,或者需要处理更复杂的情况,比如元素重复的情况。 接下来,我需要确认用户提供的引用内容。用户引用了几个LeetCode的问题和解决方案,比如349和350题,这两个题目分别处理数组交集的不同情况。349题要唯一元素,而350题允许元素出现多次。但用户现在的问题是针对Lodash.js的,所以可能需要将LeetCode中的思路转换为Lodash的实现方式。 Lodash的_.intersection函数默认返回两个数组交集,但每个元素只出现一次,类似于LeetCode349题的结果。如果用户需要像350题那样保留重复元素,可能需要其他方法,比如计数每个元素出现的次数,并取最小值。但Lodash本身是否有这样的函数呢?或者需要结合其他方法来实现? 用户可能希望得到一个明确的例子,所以需要分步骤说明。首先,引入Lodash库,然后使用_.intersection函数。例如,数组arr1和arr2的交集就是_.intersection(arr1, arr2)。但要注意,结果中的元素是唯一的,不管原数组有多少重复。如果用户需要保留重复次数,可能需要自己处理,比如遍历交集元素,统计在两个数组中出现的次数,然后添加相应的数量。 另外,用户可能遇到的常见问题包括:如何处理多个数组交集?Lodash的_.intersection可以接受多个数组参数,返回所有数组交集。例如,三个数组交集就是_.intersection(arr1, arr2, arr3)。 还需要注意,Lodash的安装和引入方式。用户可能需要知道如何通过npm安装,或者在浏览器中引入CDN链接。例如,使用script标签引入Lodash库,或者在Node.js项目中通过require引入。 然后,我需要检查用户提供的引用内容中的代码示例,看看是否有可以借鉴的地方。例如,引用3和4中的C++代码使用了集合和哈希表来记录元素,以确保唯一性。而引用5中的Python代码使用了集合交集,然后计算每个元素的最小出现次数。如果用户需要类似LeetCode 350题的解决方案,可能需要结合Lodash的_.intersection和其他方法,比如过滤数组,统计次数。 但根据用户的问题,他们可能只需要基本的交集示例,所以首先展示_.intersection的基本用法,然后如果有更复杂的需,再进一步说明如何处理。比如,如果需要保留重复元素,可以给出一个自定义函数的例子,使用Lodash的计数函数和循环来生成结果数组。 总结,回答应包括以下几点: 1. 引入Lodash库的方法。 2. _.intersection的基本使用示例。 3. 说明结果元素的唯一性。 4. 如何处理多个数组交集。 5. 如果需要保留重复元素,提供自定义解决方案的思路或代码。 同时,要确保回答结构清晰,步骤明确,并引用用户提供的参考资料中的相关信息。例如,引用[^5]中的方法使用了集合交集和最小次数,这可能对用户实现类似功能有帮助,但需要使用Lodash的函数来实现。</think>要使用 Lodash.js 获取两个数组交集,可以通过 `_.intersection` 方法实现。以下是分步说明和示例: --- ### 1. 基本用法 `_.intersection` 方法返回两个数组交集,且结果中的元素**唯一**(类似LeetCode 349题要[^4]): ```javascript const _ = require('lodash'); // 引入Lodash const arr1 = [1, 2, 2, 3]; const arr2 = [2, 3, 4]; const result = _.intersection(arr1, arr2); console.log(result); // 输出: [2, 3] ``` --- ### 2. 多个数组交集 该方法支持传入多个数组参数,返回所有数组的共同元素: ```javascript const arr3 = [2, 3, 5]; const multiIntersection = _.intersection(arr1, arr2, arr3); console.log(multiIntersection); // 输出: [2, 3] ``` --- ### 3. 保留重复元素的交集(类似LeetCode 350题) 若需保留重复元素(如元素 `2` 出现两次),需自定义逻辑: 1. 先获取唯一交集; 2. 遍历交集元素,统计在两个数组中的最小出现次数; 3. 按次数填充结果数组。 ```javascript function intersectWithDuplicates(arr1, arr2) { const uniqueIntersection = _.intersection(arr1, arr2); const countMap = new Map(); // 统计arr1中元素的出现次数 arr1.forEach(num => { if (uniqueIntersection.includes(num)) { countMap.set(num, (countMap.get(num) || 0) + 1); } }); // 统计并取最小值 const result = []; uniqueIntersection.forEach(num => { const countInArr2 = arr2.filter(x => x === num).length; const minCount = Math.min(countMap.get(num), countInArr2); result.push(...Array(minCount).fill(num)); }); return result; } // 示例 console.log(intersectWithDuplicates([1,2,2,3], [2,2,3])); // 输出: [2,2,3] ``` --- ### 4. 引用说明 - `_.intersection` 的底层实现基于哈希表,时间复杂度为 $O(n)$[^3]; - 若需处理更复杂的数据结构(如对象数组),可结合 `_.intersectionWith` 使用自定义比较器[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值