哈希表 05
LeetCode 1207
哈希表
设置一个哈希表,key为数组的元素值,value为该key值在数组中出现的次数。
然后设置HashSet集合把出现的次数去重,对比去重前后的数据长度就可得是否满足题意。
代码如下:
public class Solution {
public boolean uniqueOccurrences(int[] arr) {
// key是数组元素值,value是该值出现的次数
Map<Integer, Integer> count = new HashMap<Integer, Integer>();
for (int num : arr) {
// 遍历数组,记录每个值出现的次数
count.put(num, count.getOrDefault(num, 0) + 1);
}
// 一个是keySet,一个是HashSet,用于出现次数去重
Set<Integer> key = count.keySet();
Set<Integer> countSet = new HashSet<Integer>();
for (Integer k : key) {
countSet.add(count.get(k));
}
// 最终判断去重后是否和非去重的个数相等,即没被去重
return count.size() == countSet.size();
}
public static void main(String[] args) {
Solution s = new Solution();
int[] arr = {-3, 0, 1, -3, 1, 1, 1, -3, 10, 0};
System.out.println(s.uniqueOccurrences(arr));
}
}
下面为简洁的代码:
public class Solution {
public boolean uniqueOccurrences(int[] arr) {
Map<Integer, Integer> count = new HashMap<Integer, Integer>();
for (int num : arr) {
count.put(num, count.getOrDefault(num, 0) + 1);
}
// Map的values方法,可以返回Collection接口,里面存HashMap里的value值
return count.size() == new HashSet<Integer>(count.values()).size();
}
public static void main(String[] args) {
Solution s = new Solution();
int[] arr = {-3, 0, 1, -3, 1, 1, 1, -3, 10, 0};
System.out.println(s.uniqueOccurrences(arr));
}
}
网友评论