【问题标题】:How to Reduce Two Loops in Javascript for Efficiency如何减少 Javascript 中的两个循环以提高效率
【发布时间】:2012-08-09 21:23:59
【问题描述】:

我有一个特定的数组,我想通过它检查数组中的两个值是否等于传递给函数的值,如果两个整数相等,则将其传递给一个新数组。

我已经通过使用两个向后的while循环并将长度缓存为变量来解决这个问题,这似乎很有效。但是,有人向我提到,可能有一种方法可以消除对其中一个循环的需求,并使其更加高效,从而优化 BIG O 表示法。

任何想法如何做到这一点?这就是我所拥有的......

var intArray = [1, 3, 7, 8, 10, 4, 6, 13, 0],
    newArray = [],
    i = intArray.length;


function arrayCheck(k) {
    while(i--) {
        var z = i;
        while (z--) {
            if (intArray[i] + intArray[z] === k) {
                newArray.push(intArray[i]);
                newArray.push(intArray[z]);
            }
        }
    }
    alert(newArray);
}

arrayCheck(8);

【问题讨论】:

  • 总是会有n * (n-1) 对,但只有在原始数组发生变化时才能预先计算总和。
  • 在函数之外初始化迭代变量也是非常值得怀疑的。

标签: javascript arrays loops while-loop big-o


【解决方案1】:

有一种算法可以在线性 [O(n)] 时间内解决这个问题。我建议你看看这个SO answer

此外,正如其他人所说,将答案标记为已接受将使人们更有可能回答您的问题。您可能希望重新审视您之前提出的问题并接受任何应得的答案。

【讨论】:

  • 对不起各位,不知道我需要接受的东西,我回去看看
【解决方案2】:

如果你检查数字NintArray[i] = M,那么你需要在数组中找到一个值N-M

构建高效的树搜索以查找值 N-M,您可以在 O(n+logn) 中解决此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 2015-10-08
    • 2012-01-04
    相关资源
    最近更新 更多