数组中4个数字的总和等于特定数字

时间:2012-07-05 16:20:40

标签: c++ algorithm subset

  

可能重复:
  find four elements in array whose sum equal to a given number X

给定一个整数数组,包括正整数和负整数,找到四个不同的数字,总结到具体数字为0. O(n^4)显然不是一个好的解决方案。 E.g。

数组包含

0,1,-4,3,7,-8,-11

这里,可能的解决方案是0,1,-4,3或0,1,7,-8或1,3,7,-11

可以重复相同的值。这根本不重要。唯一要记住的是 选择的四个数字应该有不同的指数。这就是全部。

我找到了一些关于有效解决方案的材料,但对我并不满意。如果有人能帮助我,你会受到欢迎。

感谢。

1 个答案:

答案 0 :(得分:2)

好吧,从http://en.wikipedia.org/wiki/3SUM开始,这是关于找到3个加起来为0的数字,我会假设(类似于相关的(?)背包问题)没有真正好的方法来做4个数字

现在,我假设3SUM算法可以用来解决找到3个加起来而不是0的数字的问题 - 给出的算法比较== 0和<0,所以也许可以改为另一个常数。如果这不起作用你可以总是将每个整数乘以3并在执行3SUM之前从每个整数中减去常量(实际上我想从每个整数中减去c / 3,因为我们正在添加其中的3个,但算法表示整数号...)。

第4个数字可能会引入另一个因子“n”:迭代所有数字并将第4个数字合并到常量中。因此,对于3SUM,我们将留下n ^ 2,为4SUM留下n ^ 3。