1207. 独一无二的出现次数 Easy
给你一个整数数组 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
解题思路
输入:一个整数数组 arr
输出:判断是否每个数出现的次数都是独一无二的
本题属于 哈希表 问题。
我们可以遍历数组将每个数出现的次数用哈希表保存起来
将哈希表的值转成数组,判断去重后数组长度是否与没去重一致就是答案
代码实现
python
class Solution:
def uniqueOccurrences(self, arr: List[int]) -> bool:
# 使用 Counter 统计每个元素的出现次数
count = Counter(arr)
# 创建一个集合来存储所有的出现次数
occurrences = set()
# 遍历 Counter 中每个元素的出现次数
for freq in count.values():
# 如果出现次数已经存在于集合中,说明有重复的出现次数,返回 False
if freq in occurrences:
return False
# 否则,将该次数添加到集合中
occurrences.add(freq)
# 如果所有的出现次数都是唯一的,返回 True
return True
javascript
var uniqueOccurrences = function(arr) {
// 用对象存储每个数字出现的次数
const map = {};
// 遍历数组,统计频率
for (let num of arr) {
// 如果 num 已经出现过,则加 1;否则初始化为 1
map[num] = (map[num] || 0) + 1;
}
// 提取所有出现次数,形成一个数组
const values = Object.values(map);
// 使用 Set 去重,比较去重前后的长度
// 如果相等,说明所有出现次数都不同
// 如果不相等,说明有重复的出现次数
return [...new Set(values)].length === values.length;
};
复杂度分析
时间复杂度:O(n)
空间复杂度:O(n)