首頁 >web前端 >js教程 >JavaScript趣題:求數組出現頻率最大元素

JavaScript趣題:求數組出現頻率最大元素

黄舟
黄舟原創
2017-02-04 15:45:051534瀏覽

給定一個數組,將其傳入一個highestRank(arr)函數,並且返回數組中出現頻率最大的元素。

若有多個出現頻率最大的元素,傳回數值最大的那個。

舉例如下:

arr = [12, 10, 8, 12, 7, 6, 4, 10, 12];  
highestRank(arr) //=> returns 12  
  
arr = [12, 10, 8, 12, 7, 6, 4, 10, 12, 10];  
highestRank(arr) //=> returns 12  
  
arr = [12, 10, 8, 8, 3, 3, 3, 3, 2, 4, 10, 12, 10];  
highestRank(arr) //=> returns 3

對於這一類求出現頻率,咋們最好是作個統計,看各個數字出現的頻率是多少。


接著,篩選出出現頻率最大的那一個,或者說一組數。

最後,從這一組數中找出最大的,並且回傳。

我個人比較傾向於使用hash物件來解決,高效而且便於枚舉。

排序應該也可以解決,但效率一定會低些

function highestRank(arr){  
    var hash = {};  
    var highest = 0;  
    var highestArray = [];  
    for(var i=0;i<arr.length;i++){  
        var cur = arr[i];  
        if(hash[cur]){  
            hash[cur] = 1 + hash[cur];  
        }  
        else{  
            hash[cur] = 1;  
        }  
        if(hash[cur] > highest){  
            highest = hash[cur];  
        }  
    }  
    for(var j in hash){  
        if(hash.hasOwnProperty(j)){  
            if(hash[j] === highest){  
                highestArray.push(j);  
            }  
        }  
    }  
    return Math.max.apply(null,highestArray);  
}

以上就是 JavaScript趣題:求數組出現頻率最大元素的內容,更多相關內容請關注PHP中文網(www.php.cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn