这个难题的组合是解决方案吗?

时间:2013-08-21 21:29:57

标签: javascript combinations

以下是Coderbyte“简单”部分的练习。

让函数ArrayAdditionI(arr)获取数字数组并返回“true”,如果数组中的任何数字组合可以添加到数组中的最大数字,否则返回“false”。 例如:如果arr包含[4,6,23,10,1,3],则输出应返回true,因为4 + 6 + 10 + 3 = 23.

我可以想象一个解决这个问题的互动解决方案,但复杂性使我感到恐惧。 我需要学习什么来解决这个问题?

我正在阅读组合功能C(n,k)。这是正确的道路吗?

2 个答案:

答案 0 :(得分:0)

我认为这是一个垃圾箱或一个knappsack问题。这个问题也是一个决策问题所以这是一个问题。它可能是一个弱多项式问题。

答案 1 :(得分:-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)更短。

但我可能完全误解了这个问题......