0

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

我通过使用两个向后的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);
4

2 回答 2

2

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

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

于 2012-08-09T21:37:50.837 回答
1

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

构建一个高效的树搜索来查找值N-M,您可以在O(n+logn).

于 2012-08-09T22:06:38.380 回答