javascript - 从 JavaScript 中的数组中提取最重复的值?

标签 javascript algorithm

我的问题实际上类似于:Extracting the most duplicate value from an array in JavaScript (with jQuery)

解决方案(我发现最好的解决方案,并由我稍作修改):

var arr     = [3, 7, 7, 7, 7, 10, 10, 8, 5, 5, 5, 5, 20, 20, 1],
result  = {}, 
max     = 0, 
res;

for( var i = 0, total = arr.length; i < total; ++i ) {
var val = arr[i],
    inc = ( result[val] || 0 ) + 1;

result[val] = inc;

if( inc > max ) { 
    max = inc;
    res = val;
}
}
alert(res);

我想补充一点:如果我们有,比如说两个出现次数相同的数字,我们如何找到它们中的最小值(上面应该提醒 5 而不是 7,就是这种情况) ?当前的解决方案仅适用于找到最重复的第一个,但不处理重复。 谢谢!

最佳答案

在计算发生率之前对数组进行排序:

var arr = [3, 7, 7, 7, 7, 10, 10, 8, 5, 5, 5, 5, 20, 20, 1];

function min_most_duplicate (arr) {
    var result = {},
        max = 0,
        res;

    arr = arr.slice(0); // make a copy of the array
    arr.sort(function(a, b) { return (a - b); }); // sort it numerically

    for( var i = 0, total = arr.length; i < total; ++i ) {
        var val = arr[i],
        inc = ( result[val] || 0 ) + 1;

        result[val] = inc;

        if( inc > max ) { 
            max = inc;
            res = val;
        }
    }

    return res;
}

min_most_duplicate(arr); // returns 5

这是可行的,因为 for 循环的编写方式将返回它发现的第一个重复次数最多的数组,因此如果数组已排序,最小的数字将排在第一位,因此它将是那个for 循环找到的那个。

关于javascript - 从 JavaScript 中的数组中提取最重复的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7207566/

相关文章:

javascript - angularJS 我可以在指令中使用参数吗?

algorithm - 构造任何具有度约束的二分图

algorithm - 有向图 - 不可达节点

algorithm - 在无向循环中找到全对最短路径的最快方法

javascript - 如果在 ng-repeat 表中选中或取消选中复选框,如何 $watch

javascript - 在 React render() 的 map() 函数中调用函数

javascript - 创建显示为目标链接的点击链接

javascript - 解析作业未按计划时间间隔运行

algorithm - 我如何解决有关鸽子原理(离散数学)的问题?

ruby-on-rails - 数组连接函数 - Ruby on Rails