1207. 独一无二的出现次数『简单』
题目来源于力扣(LeetCode)
目录
一、题目
题目相关标签:哈希表
提示:
1 <= arr.length <= 1000
-1000 <= arr[i] <= 1000
二、解题思路
2.1 哈希表
-
遍历 arr 数组,用哈希表记录下每个数组元素出现的次数
-
遍历哈希表,通过
map.containsValue()
方法判断哈希表中的值是否存在重复判断前,需要将本次遍历的值修改为 0
2.2 哈希表 + Set 去重
-
遍历 arr 数组,用哈希表记录下每个数组元素出现的次数
-
记录下哈希表中值的个数 size
-
通过
new HashSet<>(map.values())
来创建 Set 集合 -
因 Set 集合自带去重效果,最后判断 Set 集合的元素个数与 size 是否相等
-
相等即说明各数组元素出现的次数均不相同
三、代码实现
3.1 哈希表
public static boolean uniqueOccurrences(int[] arr) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < arr.length; i++) {
// 将数字与其出现的次数存储到 map 中
map.put(arr[i], map.getOrDefault(arr[i], 0) + 1);
}
Set<Integer> set = map.keySet();
for (Integer i : set) {
int j = map.get(i);
// 令 i 的值为 0
map.put(i, 0);
// 修改 i 的值后再判断 i 之前的值是否还存在,存在则说明重复
if (map.containsValue(j)) {
return false;
}
}
return true;
}
3.2 哈希表 + Set 去重
public static boolean uniqueOccurrences(int[] arr) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < arr.length; i++) {
// 将数字与其出现的次数存储到 map 中
map.put(arr[i], map.getOrDefault(arr[i], 0) + 1);
}
int size = map.values().size();
int setSize = new HashSet<>(map.values()).size(); // set集合去重
return size == setSize;
}
四、执行用时
4.1 哈希表
4.2 哈希表 + Set 去重
五、部分测试用例
public static void main(String[] args) {
int[] arr = {1, 2, 2, 1, 1, 3}; // output: true
// int[] arr = {1, 2}; // output: false
// int[] arr = {-3, 0, 1, -3, 1, 1, 1, -3, 10, 0}; // output: true
boolean result = uniqueOccurrences(arr);
System.out.println(result);
}