0

これは、Coderbyte の「簡単な」セクションからの演習です。

関数 ArrayAdditionI(arr) で数値の配列を取得し、配列内の任意の数値の組み合わせを合計して配列内の最大数値と等しくなる場合は「true」を返し、それ以外の場合は「false」を返します。例: arr に [4, 6, 23, 10, 1, 3] が含まれている場合、4 + 6 + 10 + 3 = 23 であるため、出力は true を返す必要があります。

これに対するインタラクティブな解決策を想像することはできますが、その複雑さが私を恐怖で満たしてくれます。この問題を解決するには、何を勉強する必要がありますか?

組み合わせ関数 C(n,k) について調べています。それは正しい道ですか?

4

2 に答える 2

-1

おそらく非常に単純な解決策があります。

arrAddition = function(values) {
    // sort from largest
    values.sort(function(a, b) {
        return b-a;
    }); 
    var sum = 0;
    // starts from second, and add until reaching the limit
    for (var i = 1; i < values.length; i++) {
        sum += values[i];
        if (sum == values[0]) {
            return true;
        } else if (sum > values[0]) {
            // don't go further
            return false;
        }
    }
    // or fail.
    return false
}

Underscoreの便利なメソッド (reduce など) を使用するとさらに短くなります。

しかし、私は問題を完全に誤解していたかもしれません...

于 2013-08-21T21:57:33.157 に答える