本文最后更新于:2023年3月19日 晚上
Lt1207. 独一无二的出现次数、hash、排序、数组
给你一个整数数组 arr
,请你帮忙统计数组中每个数的出现次数。
如果每个数的出现次数都是独一无二的,就返回 true
;否则返回 false
。
示例 1:
1 2 3
| 输入:arr = [1,2,2,1,1,3] 输出:true 解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。
|
示例 2:
示例 3:
1 2
| 输入:arr = [-3,0,1,-3,1,1,1,-3,10,0] 输出:true
|
提示:
1 <= arr.length <= 1000
-1000 <= arr[i] <= 1000
思路
hash+数组去重
很显然很暴力的一种解法,使用哈希记录元素出现个数,转为数组,再去重比较前后数组长度是否发生变化
hash+排序
排序后计算每一个元素出现的数量,判断对应数字在哈希表中是否已有,已有即可返回 false
解答
hash+数组去重
1 2 3 4 5 6 7 8 9 10 11 12 13
|
var uniqueOccurrences = function (arr) { const map = new Map(); for (const num of arr) { map.set(num, map.has(num) ? map.get(num) + 1 : 1); } return ( [...map.values()].length === [...new Set(map.values()).values()].length ); };
|
排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
var uniqueOccurrences = function (arr) { arr.sort((a, b) => Number(a) - Number(b)); const map = {}; for (let i = 0; i <= arr.length - 1; i++) { let num = 0; while (i <= arr.length - 1 && arr[i + 1] === arr[i]) { i++; num++; } if (map[num]) return false; map[num] = true; } return true; };
|