【LeetCode350】两个数组的交集II(哈希表HashTable)

举报
野猪佩奇996 发表于 2022/09/24 23:20:42 2022/09/24
6.2k+ 0 0
【摘要】 一、题目 二、思路 最简单的方法是哈希表,分别统计2个数组的哈希表,key为对应的元素,value为元素的个数,然后比较两个哈希表的key是公共时,取对应的最小value。主要是用java写下熟悉...

一、题目

在这里插入图片描述

二、思路

最简单的方法是哈希表,分别统计2个数组的哈希表,key为对应的元素,value为元素的个数,然后比较两个哈希表的key是公共时,取对应的最小value。主要是用java写下熟悉下语法:

  • HashtableputIfAbsent()put有点不同,从字面上看得出,前者是如果key和value在map中为空时才put进去,而后者是强行put(就是如果之前的哈希表中即使有对应的key,也会用当前新的value去覆盖之前的value)。
  • putIfAbsent()put相同点:如果哈希表中都没对应的key,则函数都会返回null。
  • 将动态数组ArrayList转为int[]类型:ans.stream().mapToInt(Integer::valueOf).toArray()

三、代码

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
        ArrayList<Integer> ans = new ArrayList<>();
        HashMap<Integer, Integer> h1 = h(nums1);
        HashMap<Integer, Integer> h2 = h(nums2);
        //h1的所有key值
        Set<Integer> keySet = h1.keySet();
        //要找公共,所以直接从h1的哈希表开始即可
        for(Integer integer: keySet){
            if(h2.containsKey(integer)){
                //若h2也有则进行比较h1和h2的value,取最小值
                int temp_num = h1.get(integer) < h2.get(integer) ? h1.get(integer): h2.get(integer);
                //这里有temp_num个integer是重复的
                for(int i = 0; i < temp_num; i++){
                    ans.add(integer);
                }
            }
        }
        //return ans.stream().mapToInt(Integer::valueOf).toArray();
        return ans.stream().mapToInt(Integer::valueOf).toArray();
    }
    //将数组nums转为哈希表
    public HashMap<Integer, Integer> h(int[] nums){
        HashMap<Integer, Integer> hashtable = new HashMap<>();
        for(int num: nums){
            //是否有这样的键值对(num, 1),若有则value则加1
            if(hashtable.putIfAbsent(num, 1) != null){
                hashtable.put(num, hashtable.putIfAbsent(num, 1) + 1);
            }
        }
        return hashtable;
    }
}

  
 

文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。

原文链接:andyguo.blog.csdn.net/article/details/126695970

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。