第二十一天:力扣第1207题,独一无二的出现次数
地址:leetcode-cn.com/problems/un…
思路:排序,数组存入次数,再排序,比较有无相同。
var uniqueOccurrences = function(arr) {
arr.sort((a,b) => a-b);//排序,后面好比较
let res = [];//这个是存入次数的
res[0] = 1;
for(let i = 0,j = 0; i < arr.length-1; i++)
{
if(arr[i] === arr[i+1])//相等次数加一
{
res[j]++;
}
else{//不相等的换res
j += 1;
res[j] = 1;
}
}
res.sort((a,b) => a-b);//排序
for(let i = 0; i < res.length-1; i++)//比较是否相等
{
if(res[i] === res[i+1])
{
return false;
}
}
return true;
};
执行用时:76 ms, 在所有 JavaScript 提交中击败了94.05%的用户
内存消耗:39 MB, 在所有 JavaScript 提交中击败了22.58%的用户
官方给的是哈希表实现;
首先使用哈希表记录每个数字的出现次数;随后再利用新的哈希表,统计不同的出现次数的数目。如果不同的出现次数的数目等于不同数字的数目,则返回true,否则返回 false。
var uniqueOccurrences = function(arr) {
const occur = new Map();
for (const x of arr) {
if (occur.has(x)) {
occur.set(x, occur.get(x) + 1);
} else {
occur.set(x, 1);
}
}
const times = new Set();
for (const [key, value] of occur) {
times.add(value);
}
return times.size === occur.size;
};