0

特定の配列があります。これにより、配列内の2つの値が関数に渡された値と等しいかどうかを確認し、2つの整数が等しい場合は、それを新しい配列に渡します。

これを解決するには、2つの後方whileループを使用し、長さを変数としてキャッシュします。これは効率的と思われます。ただし、誰かが私に言ったのは、ループの1つが不要になり、それをはるかに効率的にして、BIGO表記を最適化する方法があるかもしれないということです。

これをどのように行うことができるかについてのアイデアはありますか?これは私が持っているものです...

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

N数値、およびをチェックする場合は、配列内のintArray[i] = M値を見つける必要があります。N-M

値を見つけるための効率的なツリー検索を構築するN-Mと、でこれを解決できますO(n+logn)

于 2012-08-09T22:06:38.380 に答える