首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >基础 求两个数组的交集(利用哈希表)

基础 求两个数组的交集(利用哈希表)

作者头像
用户11956880
发布2025-12-18 18:07:10
发布2025-12-18 18:07:10
2360
举报
代码语言:javascript
复制
class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        unordered_set<int> result_set;
        unordered_set<int> nums_set(nums1.begin(),nums1.end());
        for(auto num:nums2){//遍历nums2
            if(nums_set.find(num)!=nums_set.end()){//用find在nums1里去找num的地址遍历一遍,
                result_set.insert(num);//在里面的num就插入result里
            }
        }
        return vector<int>(result_set.begin(),result_set.end());
    }
};

讲之前先说一下这两个点

什么时候用哈希表呢就是,当你遇到要求某个元素是否在出现在一个数组里,这时候我们就可以下意识去想到它。

再简单说一下set和unordered_set的区别,set是有序,并且元素只出现一次,另一个是无序,并且元素只出现一次   在这里用哪个都是可以的因为求得是交集,只要保证这里面的数是出现一次就可以。

简单讲述一下,就是给两个数组nums1,2

设个result_set用来存交集,在设个nums_set,存下nums1的数组内的元素,因为是unordered_set类型的所以自动去重

set<int> nums_set(nums1.begin(),nums1.end());这样的初始化方式也可以说成拷贝吧,容器都可以做到。

下面的循环,利用auto自动转化num的类型

接下来插入进交集中

最后因为返回值类型是vector<int>所以最后再强转一下

代码语言:javascript
复制
class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        unordered_set<int> result_set;
        int hash[1000+10]={0};//利用数组来做哈希表
        for(auto num:nums1){
            hash[num]=1;
        }
        for(auto num:nums2){
            if(hash[num]==1){
                result_set.insert(num);
            }
        }
        return vector<int>(result_set.begin(),result_set.end());
    }
};

我们还可以利用数组来做哈希表来解决

讲之前说一下哈希表选择什么来做,数组(当数据较小我们选择),set,map(数据复杂我们选择)

先设个数组hash,让其所有数初始化为0,然后就是和上面一样的遍历这些看看就会了本质没什么区别

有什么写的不妥的可以评论我去改,吼吼吼。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档