查找数组中最常重复的元素

时间:2015-11-05 15:17:56

标签: javascript arrays multidimensional-array

我正在研究一种解决方案,以找到给定一系列数字的最小公倍数[1,13]; 到目前为止,我已设法获得范围的数组: - [1,2,3,4,5,6,7,8,9,10,11,12,13] 以及该范围内每个数字的素数因子数组: - [[2],[3],[2,2],[5],[2,3],[7],[2,2,2],[3,3],[5,2],[ 2,2,3],[13]

我想要做的是能够将因子数组减少到包含如下因子的大多数实例的数组: - [[2,2,2],[3,3],[5], [7],[11],[13]]

有没有办法可以实现这一点我已经被困住了一段时间

2 个答案:

答案 0 :(得分:0)

使用数组作为键/值对。你的密钥可以是因子数组的“stringyfied”表示,而值当然是{出现次数,因子数组}。扫描数组并增加相应的出现次数。找出出现数组的最大值

答案 1 :(得分:0)

基本上问题可以分为

  • 整数分解getFactors()
  • 因素计数
  • 仅获取金额较高的计数
  • 将结果转换为数组

function range(a, b) {

    function getFactors(n) {
        var f, count = {};
        while (n !== 1) {
            f = 2;
            while (n % f) { f++; }
            count[f] = (count[f] || 0) + 1;
            n /= f;
        }
        return count;
    }

    var array = [],
        count = {},
        i;

    for (i = a; i <= b; i++) {
        array.push(getFactors(i));
    }
    array.forEach(function (a) {
        Object.keys(a).forEach(function (k) {
            count[k] = Math.max(count[k] || 0, a[k]);
        });
    });
    return Object.keys(count).map(function (k) {
        var r = [];
        while (count[k]--) {
            r.push(+k);
        }
        return r;
    });
}

document.write('<pre>' + JSON.stringify(range(1, 13), 0, 4) + '</pre>');