我刚刚做Greplin programming challenge并进入最后一级,任务听起来像这样:
For the final task, you must find all subsets of an array
where the largest number is the sum of the remaining numbers.
For example, for an input of:
(1, 2, 3, 4, 6)
the subsets would be
1 + 2 = 3
1 + 3 = 4
2 + 4 = 6
1 + 2 + 3 = 6
Here is the list of numbers (3, 4, 9, 14, 15, 19, 28, 37, 47, 50, 54, 56, 59, 61, 70, 73, 78, 81, 92, 95, 97, 99)
you should run your code on.
The password is the number of subsets. In the above case the
answer would be 4.
你能给我一个建议吗我该怎么办?我认为蛮力不适合这里,是吗?
不要编写代码!
谢谢。
答案 0 :(得分:1)
使用dynamic programming,可以将较小数字的解决方案扩展到更大数字的解决方案。
答案 1 :(得分:0)
我粗暴地强迫这个问题(在Python中)并在不到一分钟的时间内得到答案。帮助(这里有一个提示)是Python library itertools支持生成数组/列表/序列的N长度组合。
要生成数组的所有可能子集,首先生成可能的1长子集,然后生成2长子集,然后生成3长子集,最多N长度。如果没有一个好的库来提供combinations()函数供您使用,那么在自己编写代码时,一种可能的方法就是使用递归。