https://leetcode.cn/problems/unique-number-of-occurrences/
本题强调了-1000 <= arr[i] <= 1000,那么就可以用数组来做哈希,arr[i]作为哈希表(数组)的下标,那么arr[i]可以是负数,怎么办?负数不能做数组下标。
此时可以定义一个2000大小的数组,例如int count[2002];,统计的时候,将arr[i]统一加1000,这样就可以统计arr[i]的出现频率了。
题目中要求的是是否有相同的频率出现,那么需要再定义一个哈希表(数组)用来记录频率是否重复出现过,boolean flag [1002]; 定义布尔类型的就可以了,因为题目中强调1 <= arr.length <= 1000,所以哈希表大小为1000就可以了。
class Solution {
public boolean uniqueOccurrences(int[] arr) {
int[] count = new int[2002];
for (int i = 0; i < arr.length; i++) {
count[arr[i] + 1000]++; // 防止负数作为下标
}
boolean[] flag = new boolean[1002]; // 标记相同频率是否重复出现
for (int i = 0; i <= 2000; i++) {
if (count[i] > 0) {
if (flag[count[i]] == false) {
flag[count[i]] = true;
} else {
return false;
}
}
}
return true;
}
}