Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述
- 给你一个整数数组
arr,请你帮忙统计数组中每个数的出现次数。 - 如果每个数的出现次数都是独一无二的,就返回
true;否则返回false。 - 示例 1:
- 输入: arr = [1,2,2,1,1,3]
- 输出: true
- 解释: 在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。
- 示例 2:
- 输入: arr = [1,2]
- 输出: false
- 示例 3:
- 输入: arr = [-3,0,1,-3,1,1,1,-3,10,0]
- 输出: true
- 提示:
1 <= arr.length <= 1000-1000 <= arr[i] <= 1000
二、思路分析:
- 要判断每个数字的出现次数是否有相同的,首先要统计所有数字出现的次数
- 第一步先利用
Set去重,拿到去重后的数组去遍历原始数组,统计每个数字出现的次数- 统计次数的时候可以每个数字声明一个变量去保存数字
- 这里声明的是数组,用数组的长度来映射每个数字的出现次数
- 遍历统计后的二维数组,每个子数组的长度就是每个数字的出现次数
- 判断子数组的长度是否相等,如果有相等的情况,就说明没有独一无二出现的次数,返回
false,否则返回true
- 判断子数组的长度是否相等,如果有相等的情况,就说明没有独一无二出现的次数,返回
三、AC 代码:
function uniqueOccurrences(arr: number[]): boolean {
let repeatArr = [...new Set(arr)];
let result = [];
for(let i = 0; i < repeatArr.length; i++){
let num = [];
for(let j = 0; j < arr.length; j++){
if(repeatArr[i] === arr[j]){
num.push(arr[j]);
}
}
result.push(num)
}
for(let i = 0; i < result.length; i++){
for(let j = i + 1; j < result.length; j++){
if(result[i].length === result[j].length){
return false
}
}
}
return true
};
四、总结:
- 题目还是比较简单的,注意下先去重就好了
- 更多解题方式,移步题解区