Leetcode——349. 两个数组的交集/350. 两个数组的交集 II

概述

分析

349

  • 题目要求寻找带个数组中元素的交集,并且最后输出唯一的值
  • 此题的交集才真正的符合数学上的交集
  • 同样,可以使用哈希表统计

350

  • 350和349的区别在于最终返回的结果要输出重复元素在两个数组中出现的最少次数
  • 可以和349一样使用哈希表来确定重复的元素,但是key对应的value的赋值应该有所不同

思路

代码

349

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        int hash_table[1005] = {0};			// 1005是题目限制的元素的最大值
        for (auto num : nums1)
            hash_table[num] = 1;			// 统计,注意这里直接赋值1,因为该哈希的key值只需要
        
        vector<int> result;
        for (auto num : nums2)
            if (--hash_table[num] >= 0)  result.push_back(num);		// 统计

        return result;
    }
};

350

class Solution {
public:
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
        unordered_map<int,int> unordered_map_int_to_int;
        for (auto num : nums1)
            ++unordered_map_int_to_int[num];		// 这里要统计元素出现的次数
        
        vector<int> result;
        for (auto num : nums2) {
            if (unordered_map_int_to_int[num]-- > 0)	// 判断>0,可以确保元素加入的次数是在两个数组中 
                result.emplace_back(num);			// 重复出现的元素要多次加入结果
        }
        return result;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值