给定一个数组,将其传入一个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趣题:求数组出现频率最大元素的内容。