组合是解决这个难题的办法吗
Are combinations the solution to this puzzle?
下面是Coderbyte"easy"部分的一个练习。
让函数ArrayAdditionI(arr)取一个数字数组,如果数组中的任何数字组合加起来可以等于数组中的最大数字,则返回"true",否则返回"false"。例如:如果arr包含[4,6,23,10,1,3],则输出应返回true,因为4+6+10+3=23。
我可以想象一个相互作用的解决方案,但复杂性让我感到恐惧。我需要学习什么来解决这个问题?
我正在读组合函数C(n,k)。这条路对吗?
我认为这是一个1d垃圾箱包装或背包问题。这个问题也是一个决策问题,所以它是一个np问题。它可能是一个弱多项式问题。
也许有一个非常天真的解决方案:
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
}
使用Undercore方便的方法(如reduce),它甚至更短。
但我可能完全误解了这个问题。。。
相关文章:
- 如何解决Yii中的页面刷新问题
- 测试Angular Service解决错误回调中的promise
- 如何解决Access Control Allow Origin错误
- 如何解决这种情况下的非法调用类型错误
- 简单的ES6承诺问题-交换解决和拒绝参数
- 可以转换显示属性吗?如果没有,什么'这是最好的解决方案
- iPad虚拟键盘-哪一个-javasctript解决方案
- 在ES6 Promise中,我应该在解决/拒绝之前使用return吗
- 如何解决“;错误所请求的URL返回500-内部服务器错误”;
- 如何逃离<脚本>jquery html()中的标记.我使用了innerHTML和outerHTML来解决这个
- 如何解决'窗口未定义'终端上的节点JS出错
- Angularjs:如何在使用'解决'在$routeProvider中
- 可以't解决Javascript错误
- AJAX HTTP基本身份验证解决方案
- 为什么不'我的窗口滚动事件根本没有启动.其他答案没有解决问题
- 如何解决此错误
- 在chrome web商店中打开时,是否有允许执行内容/后台脚本的解决方案
- 组合是解决这个难题的办法吗
- 用JavaScript解决这个看似简单的数组循环难题
- 使用JavaScript解决这个编码难题很麻烦