LeetCode每日一题,1207. Unique Number of Occurrences
先看题目描述
大意就是给定一个数组 arr,让我们判断数组中每个数字中出现的次数是否为唯一的
算法和思路
哈希表
大致思路就是使用两个哈希表,一个哈希表 cnt 存储数组中每个数字对应的出现次数,一个哈希表 map 存储出现次数对应的数字,遍历一次 arr 数组将 cnt 填充好后,然后用 cnt 以数字的出现次数作为 key 值去填充 map,在填充 map 时若出现 key 值已存在的情况,则说明出现了有两个数字的出现次数相同的情况,直接返回 false;若填充完以后也未出现这种情况,则返回 true
算法源码
1 | import java.util.*; |
然后去看题解,发现题解使用的是集合,在将存储数组中每个数字对应的出现次数的哈希表填充好以后,题解中代码是将哈希表中的每个 value 值加入到一个集合中,由于集合会自动去重,最后只需判断集合的大小和哈希表的大小是否相等即可
两个的效率基本是一致的,不过题解的代码中有一些用法和函数是以前没接触过的,例如哈希表的 getOrDefault(x, default)方法,这个方法和 python 中字典的 get 方法是差不多的,就是若 key 中存在 x 的话,则返回其对应的 value 值,否则就返回 default;还有就是哈希表的 entrySet() 方法,这个方法会返回哈希表中的所有键值对 Entry<key, value>,而键值对 Entry 又有相应的 getKey() 和 getValue() 等获取健和获取值的方法
代码如下
1 | class Solution { |