
可以通过哈希集来判断是否独一无二,如果set中已经包含了count,那么set.add(count)
会返回false
java
class Solution {
public boolean uniqueOccurrences(int[] arr) {
Map<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < arr.length; i++) {
map.put(arr[i], map.getOrDefault(arr[i], 0) + 1);
}
//然后创建一个set统计是否独一无二
Set<Integer> set = new HashSet<>();
for(int count : map.values()) {
if(!set.add(count)) {
return false;
}
}
return true;
}
}
map.values()
会返回这个 Map
中所有 value(值) 的一个Collection视图 ,也就是说,它返回的是所有"出现次数"组成的集合(但不是 Set
,而是一个 Collection
)。
举个例子:
java
Map<Integer, Integer> map = new HashMap<>();
map.put(1, 3);
map.put(2, 2);
map.put(3, 1);
Collection<Integer> values = map.values();
System.out.println(values);
输出结果为:
[3, 2, 1]
注意几点:
-
map.values()
返回的是 Collection<Integer> 类型,不是List
也不是Set
; -
这个
Collection
是一个视图,和Map
是关联的,如果你修改这个Collection
,Map
也会变; -
如果
map
中有重复的值,map.values()
也会反映出这些重复,例如:javamap.put(4, 3);
此时
values
变为[3, 2, 1, 3]
应用场景:
- 如果你只是想遍历所有的 value,
for (int v : map.values())
是很常用的; - 如果你想判断这些 value 是否都不相同,通常会结合
Set
来做唯一性检查(如你这题中的场景)。