4040回归本题,** 本题强调了-1000 <= arr[ i] <= 1000** ,那么就可以用数组来做哈希,arr[ i] 作为哈希表(数组)的下标,那么arr[ i] 可以是负数,怎么办?负数不能做数组下标。
4141
4242
43- ** 此时可以定义一个2000大小的数组 ,例如int count[ 2002 ] ;** ,统计的时候,将arr[ i] 统一加1000,这样就可以统计arr[ i] 的出现频率了。
43+ ** 此时可以定义一个2001大小的数组 ,例如int count[ 2001 ] ;** ,统计的时候,将arr[ i] 统一加1000,这样就可以统计arr[ i] 的出现频率了。
4444
45- 题目中要求的是是否有相同的频率出现,那么需要再定义一个哈希表(数组)用来记录频率是否重复出现过,bool fre[ 1002 ] ; 定义布尔类型的就可以了,** 因为题目中强调1 <= arr.length <= 1000,所以哈希表大小为1000就可以了** 。
45+ 题目中要求的是是否有相同的频率出现,那么需要再定义一个哈希表(数组)用来记录频率是否重复出现过,bool fre[ 1001 ] ; 定义布尔类型的就可以了,** 因为题目中强调1 <= arr.length <= 1000,所以哈希表大小为1000就可以了** 。
4646
4747如图所示:
4848
@@ -55,11 +55,11 @@ C++代码如下:
5555class Solution {
5656public:
5757 bool uniqueOccurrences(vector<int >& arr) {
58- int count[ 2002 ] = {0}; // 统计数字出现的频率
58+ int count[ 2001 ] = {0}; // 统计数字出现的频率
5959 for (int i = 0; i < arr.size(); i++) {
6060 count[ arr[ i] + 1000] ++;
6161 }
62- bool fre[ 1002 ] = {false}; // 看相同频率是否重复出现
62+ bool fre[ 1001 ] = {false}; // 看相同频率是否重复出现
6363 for (int i = 0; i <= 2000; i++) {
6464 if (count[ i] ) {
6565 if (fre[ count[ i]] == false) fre[ count[ i]] = true;
@@ -78,7 +78,7 @@ public:
7878```java
7979class Solution {
8080 public boolean uniqueOccurrences(int[] arr) {
81- int[] count = new int[2002 ];
81+ int[] count = new int[2001 ];
8282 for (int i = 0; i < arr.length; i++) {
8383 count[arr[i] + 1000]++; // 防止负数作为下标
8484 }
@@ -103,10 +103,10 @@ class Solution {
103103# 方法 1: 数组在哈西法的应用
104104class Solution :
105105 def uniqueOccurrences (self , arr : List[int ]) -> bool :
106- count = [0 ] * 2002
106+ count = [0 ] * 2001
107107 for i in range (len (arr)):
108108 count[arr[i] + 1000 ] += 1 # 防止负数作为下标
109- freq = [False ] * 1002 # 标记相同频率是否重复出现
109+ freq = [False ] * 1001 # 标记相同频率是否重复出现
110110 for i in range (2001 ):
111111 if count[i] > 0 :
112112 if freq[count[i]] == False :
@@ -139,12 +139,12 @@ class Solution:
139139``` javascript
140140// 方法一:使用数组记录元素出现次数
141141var uniqueOccurrences = function (arr ) {
142- const count = new Array (2002 ).fill (0 );// -1000 <= arr[i] <= 1000
142+ const count = new Array (2001 ).fill (0 );// -1000 <= arr[i] <= 1000
143143 for (let i = 0 ; i < arr .length ; i++ ){
144144 count[arr[i] + 1000 ]++ ;// 防止负数作为下标
145145 }
146146 // 标记相同频率是否重复出现
147- const fre = new Array (1002 ).fill (false );// 1 <= arr.length <= 1000
147+ const fre = new Array (1001 ).fill (false );// 1 <= arr.length <= 1000
148148 for (let i = 0 ; i <= 2000 ; i++ ){
149149 if (count[i] > 0 ){// 有i出现过
150150 if (fre[count[i]] === false ) fre[count[i]] = true ;// 之前未出现过,标记为出现
0 commit comments