【发布时间】:2014-06-03 21:31:27
【问题描述】:
解决这个问题的最佳方法是什么?我不知道如何开始。这不是作业问题,而是面试练习。
'使用 JavaScript 语言,让函数 ArrayAddition(arr) 获取存储在 arr 中的数字数组,如果数组中的任何数字组合可以相加等于数组中的最大数字,则返回字符串 true,否则返回字符串 false。例如:如果 arr 包含 [4, 6, 23, 10, 1, 3],则输出应返回 true,因为 4 + 6 + 10 + 3 = 23。数组不会为空,不会包含所有相同的元素,并且可能包含负数。 '
http://coderbyte.com/CodingArea/GuestEditor.php?ct=Array%20Addition&lan=JavaScript
【问题讨论】:
-
@GameAlchemist :cough ***hole :cough
-
提示:数字 0 到 2^n - 1 的二进制表示对 n的所有可能子集进行编码> 元素集。正如@Bergi 指出的那样,这是一个 NP 完全问题,因此他们不能指望任何有效的东西。这并不是说您不能做一些非常聪明的事情来提高运行时的指数,而是先尝试得到一个蛮力的答案。编辑:这是假设“echo true”不是一个可接受的答案。
-
@AndyJones 你可以期待一个伪多项式解决方案。如果数字是有界的,那么很容易有效地解决
-
@AndyJones 实际上它可以在 O((B-A)*N) 中工作,其中 A 和 B 分别是数组的最小值和最大值。但是当然有了浮点,所有的希望都消失了。还有一个不错的 O(2^(n/2)) 中间相遇算法,适用于任意值
标签: javascript arrays algorithm array-algorithms