LeetCode.1207 独一无二的出现次数

166 阅读1分钟

「这是我参与2022首次更文挑战的第25天,活动详情查看:2022首次更文挑战」。

题目描述:

1207. 独一无二的出现次数 - 力扣(LeetCode) (leetcode-cn.com)

给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。

如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false

示例一

输入:arr = [1,2,2,1,1,3]
输出:true
解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。

示例二

输入: arr = [1,2]
输出: false

示例三

输入: arr = [-3,0,1,-3,1,1,1,-3,10,0]
输出: true

提示:

  • 1 <= arr.length <= 1000
  • -1000 <= arr[i] <= 1000

思路分析

哈希表

这种题目一看就想到用哈希表,我们用哈希表来统计下每个数字的次数,然后利用新的哈希表,统计不同数字出现的次数。

如果不同的出现次数的数目等于不同数字的数目,则返回 true\text{true},否则返回 false\text{false}

AC代码

class Solution {
    fun uniqueOccurrences(arr: IntArray): Boolean {
        // 1. 统计
        val map = HashMap<Int, Int>()
        for (num in arr) {
            map.append(num)
        }
        // 2. 检查
        val set = HashSet<Int>()
        for ((key, value) in map) {
            if (set.contains(value)) {
                return false
            }
            set.add(value)
        }
        return true
    }

    private fun HashMap<Int, Int>.append(num: Int) {
        if (null == this[num]) {
            this[num] = 0
        } else {
            this[num] = this[num]!! + 1
        }
    }
}
class Solution {
    fun uniqueOccurrences(arr: IntArray): Boolean {
        val hashMap = HashMap<Int, Int>()
        arr.forEach {
            hashMap[it] = (hashMap[it] ?: 0) + 1
        }
        return hashMap.values.toSet().size == hashMap.size
    }
}

参考

独一无二的出现次数 - 独一无二的出现次数 - 力扣(LeetCode) (leetcode-cn.com)

1207. Unique Number of Occurrences 独一无二的出现次数 - 独一无二的出现次数 - 力扣(LeetCode) (leetcode-cn.com)

1207. 独一无二的出现次数 - 独一无二的出现次数 - 力扣(LeetCode) (leetcode-cn.com)

3种解决方式 - 独一无二的出现次数 - 力扣(LeetCode) (leetcode-cn.com)