📌  相关文章
📜  不能被Array其他元素整除的元素计数(1)

📅  最后修改于: 2023-12-03 15:06:13.200000             🧑  作者: Mango

介绍

在一个数组中,找出那些不能被其他元素整除的元素是一道比较基础的算法题。本文将向程序员介绍如何实现这个算法。

实现思路

我们首先需要遍历整个数组,然后对于每个元素,我们需要判断它是否可以被其他元素整除。为了方便,我们可以先对数组进行排序,这样可以避免之后的重复计算。

接着,我们可以使用两层循环来判断一个元素是否可以被其他元素整除。对于当前元素,我们可以从数组头开始遍历,一直遍历到当前元素的前一个位置。如果当前元素可以被某个其他元素整除,那么就可以跳出内层循环,否则就继续循环。如果内层循环完毕,说明当前元素不能被任何其他元素整除,那么就可以将计数器加一。

代码实现
function countNonDivisible(A) {
    const len = A.length;
    const sortedA = A.slice().sort((a, b) => a - b);
    const counts = {};

    for (let i = 0; i < len; i++) {
        const current = sortedA[i];
        let j = 0;
        let count = 0;

        while (sortedA[j] <= Math.sqrt(current)) {
            if (current % sortedA[j] === 0) {
                count += (sortedA[j] === current) ? 0 : counts[sortedA[j]];
                count += (sortedA[j] === Math.sqrt(current)) ? 0 : counts[current / sortedA[j]];
            }
            j++;
        }

        counts[current] = len - count;
    }

    return A.map((n) => counts[n]);
}
解析

上述代码使用了一个对象 counts 来记录每个元素的计数值。在外层循环中,我们对每个元素进行判断,并将计数值保存到 counts 中。在最后,我们将每个元素对应的计数值存到一个新的数组中,并返回这个数组。

值得注意的是,在内层循环中,我们只遍历到当前元素的平方根,这是因为一个数 x 和它的因数 y 一定满足 y <= sqrt(x)。另外,我们需要注意排除掉当前元素本身和它的平方根,因为一个元素不可能被自身和自身的平方根整除。

总结

本文介绍了如何实现一个计算不能被数组其他元素整除的元素个数的算法。代码主要逻辑是使用两层循环来遍历数组,并使用一个对象来记录每个元素的计数值。实现这个算法需要注意遍历的顺序和边界情况的处理。