fix prob.1207

This commit is contained in:
jycathy
2024-06-16 17:32:38 +08:00
parent 70643a80a0
commit 9aca3b5ca4

View File

@ -40,9 +40,9 @@
回归本题,**本题强调了-1000 <= arr[i] <= 1000**那么就可以用数组来做哈希arr[i]作为哈希表数组的下标那么arr[i]可以是负数,怎么办?负数不能做数组下标。 回归本题,**本题强调了-1000 <= arr[i] <= 1000**那么就可以用数组来做哈希arr[i]作为哈希表数组的下标那么arr[i]可以是负数,怎么办?负数不能做数组下标。
**此时可以定义一个2000大小的数组例如int count[2002];**统计的时候将arr[i]统一加1000这样就可以统计arr[i]的出现频率了。 **此时可以定义一个2001大小的数组例如int count[2001];**统计的时候将arr[i]统一加1000这样就可以统计arr[i]的出现频率了。
题目中要求的是是否有相同的频率出现那么需要再定义一个哈希表数组用来记录频率是否重复出现过bool fre[1002]; 定义布尔类型的就可以了,**因为题目中强调1 <= arr.length <= 1000所以哈希表大小为1000就可以了**。 题目中要求的是是否有相同的频率出现那么需要再定义一个哈希表数组用来记录频率是否重复出现过bool fre[1001]; 定义布尔类型的就可以了,**因为题目中强调1 <= arr.length <= 1000所以哈希表大小为1000就可以了**。
如图所示: 如图所示:
@ -55,11 +55,11 @@ C++代码如下:
class Solution { class Solution {
public: public:
bool uniqueOccurrences(vector<int>& arr) { bool uniqueOccurrences(vector<int>& arr) {
int count[2002] = {0}; // 统计数字出现的频率 int count[2001] = {0}; // 统计数字出现的频率
for (int i = 0; i < arr.size(); i++) { for (int i = 0; i < arr.size(); i++) {
count[arr[i] + 1000]++; count[arr[i] + 1000]++;
} }
bool fre[1002] = {false}; // 看相同频率是否重复出现 bool fre[1001] = {false}; // 看相同频率是否重复出现
for (int i = 0; i <= 2000; i++) { for (int i = 0; i <= 2000; i++) {
if (count[i]) { if (count[i]) {
if (fre[count[i]] == false) fre[count[i]] = true; if (fre[count[i]] == false) fre[count[i]] = true;
@ -78,7 +78,7 @@ public:
```java ```java
class Solution { class Solution {
public boolean uniqueOccurrences(int[] arr) { public boolean uniqueOccurrences(int[] arr) {
int[] count = new int[2002]; int[] count = new int[2001];
for (int i = 0; i < arr.length; i++) { for (int i = 0; i < arr.length; i++) {
count[arr[i] + 1000]++; // 防止负数作为下标 count[arr[i] + 1000]++; // 防止负数作为下标
} }
@ -103,10 +103,10 @@ class Solution {
# 方法 1: 数组在哈西法的应用 # 方法 1: 数组在哈西法的应用
class Solution: class Solution:
def uniqueOccurrences(self, arr: List[int]) -> bool: def uniqueOccurrences(self, arr: List[int]) -> bool:
count = [0] * 2002 count = [0] * 2001
for i in range(len(arr)): for i in range(len(arr)):
count[arr[i] + 1000] += 1 # 防止负数作为下标 count[arr[i] + 1000] += 1 # 防止负数作为下标
freq = [False] * 1002 # 标记相同频率是否重复出现 freq = [False] * 1001 # 标记相同频率是否重复出现
for i in range(2001): for i in range(2001):
if count[i] > 0: if count[i] > 0:
if freq[count[i]] == False: if freq[count[i]] == False:
@ -139,12 +139,12 @@ class Solution:
``` javascript ``` javascript
// 方法一:使用数组记录元素出现次数 // 方法一:使用数组记录元素出现次数
var uniqueOccurrences = function(arr) { var uniqueOccurrences = function(arr) {
const count = new Array(2002).fill(0);// -1000 <= arr[i] <= 1000 const count = new Array(2001).fill(0);// -1000 <= arr[i] <= 1000
for(let i = 0; i < arr.length; i++){ for(let i = 0; i < arr.length; i++){
count[arr[i] + 1000]++;// 防止负数作为下标 count[arr[i] + 1000]++;// 防止负数作为下标
} }
// 标记相同频率是否重复出现 // 标记相同频率是否重复出现
const fre = new Array(1002).fill(false);// 1 <= arr.length <= 1000 const fre = new Array(1001).fill(false);// 1 <= arr.length <= 1000
for(let i = 0; i <= 2000; i++){ for(let i = 0; i <= 2000; i++){
if(count[i] > 0){//有i出现过 if(count[i] > 0){//有i出现过
if(fre[count[i]] === false) fre[count[i]] = true;//之前未出现过,标记为出现 if(fre[count[i]] === false) fre[count[i]] = true;//之前未出现过,标记为出现