Skip to content

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)

链接

1207 国际版

1207 中文版