leetcode 349. 两个数组的交集

day6

这题主要是来练练set在哈希表中的应用

首先,关于set使用哈希有三种数据结构

set

unordered_set

muti_set

 本题选用unordered_set 更快

思路:先将一个数组转换程 set 达到去重的效果,再遍历另一个数组,来查找是否在哈希表中出现,如果出现,就插入到res(我们定义的unordered_set,用来存放结果)。

新学到的点:

1. 定义一个set unorder_set<int> res;

2.学到了三个函数 find(x) 查找 x 是否在set中出现过

3.容器之间的转化 unordered_set<int> num_set(num1.begin() , num1.end());

4. 注意这里 return 的时候 不用加上变量名 不然会报错

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        // 遇到的第一个问题:如何定义一个set?
        // 第二个问题:set中的函数使用?
        // set中的数据是不能重复的,所以想把给的数组,转为set 如何转?
        // 本题分为三个步骤 1. 先将一个数组转为哈希的结构 2. 再用另一个数组在哈希结构里查找
        // 3. 如果查找到了,就将其插入到新的set内

        unordered_set<int> res;
        unordered_set<int> nums_set(nums1.begin(),nums1.end()); // 转换操作 1.哈希映射
        for(int i = 0; i < nums2.size(); i++)  // 2.遍历另一个数组
           if( nums_set.find(nums2[i]) != nums_set.end())
                res.insert(nums2[i]);    // 3.找到就插入

        return vector<int>(res.begin(),res.end());    // 不要加变量名
    } 
};

也可以用数组来解决,方法和上一题差不多,用下标来映射

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        int hash[1005] = {0};
        unordered_set<int> res;
        //1.做哈希映射
        for(int i = 0; i < nums1.size(); i++)
            hash[nums1[i]] = 1;  // 又是类似桶排序的操作  // 和字母那题的映射方法和处理方法不一样
        // 2.遍历另一个数组
        for(int i = 0; i < nums2.size(); i++)
            if(hash[nums2[i]] == 1)
                res.insert(nums2[i]);  // 3.插入操作
        return vector<int>(res.begin(),res.end());
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值