獨一無二的出現次數

WindrunnerMax發表於2020-10-28

獨一無二的出現次數

給你一個整數陣列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

題解

/**
 * @param {number[]} arr
 * @return {boolean}
 */
var uniqueOccurrences = function(arr) {
    var hashTable = Object.create(null);
    arr.forEach(v => {
        if(hashTable[v] === void 0) hashTable[v] = 1;
        else ++hashTable[v];
    })
    var keys = Object.keys(hashTable);
    var values = Object.values(hashTable);
    return keys.length === [...new Set(values)].length;
};

思路

使用雜湊表記錄每個數字出現的次數,之後使用Set處理出現的次數,然後對比雜湊表的長度即可,首先定義一個雜湊表,在此處是使用Js的普通物件的形式,此處只是為了藉助其結構所以不需要原型指向,另外在Js中提供了Map物件作為鍵值對雜湊表的解決方案,之後遍歷陣列,如果未定義,那麼就將雜湊表的此鍵值的值設定為1,如果鍵值在雜湊表中定義,那麼就將其值加1,之後獲取物件中所有的鍵陣列,以及所有的值陣列,之後將值陣列作為引數傳入Set物件去重,之後用Spread操作符將其展開並形成一個新陣列,之後獲取其長度與鍵陣列的長度作比較並返回即可。

每日一題

https://github.com/WindrunnerMax/EveryDay

參考

https://leetcode-cn.com/problems/unique-number-of-occurrences/

相關文章