「这是我参与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
思路分析
哈希表
这种题目一看就想到用哈希表,我们用哈希表来统计下每个数字的次数,然后利用新的哈希表,统计不同数字出现的次数。
如果不同的出现次数的数目等于不同数字的数目,则返回 ,否则返回 。
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)