我的js算法爬坑之旅-独一无二的出现次数

97 阅读1分钟

第二十一天:力扣第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;
};