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

举报
野猪佩奇996 发表于 2022/09/24 23:20:42 2022/09/24
【摘要】 一、题目 二、思路 最简单的方法是哈希表,分别统计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;
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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