从数组中找到恰好等于给定N的四个整数,并且这些整数需要最大化其最终乘积

时间:2018-09-26 16:20:25

标签: algorithm

请注意,我不是在这里要求代码,但是我正在寻求一种方法和解释。

给定一个整数和整数N的数组,我们如何才能找到恰好相加后将等于N的四个整数。在某种情况下,我们应该找到四个这样的整数A,B,C,D,会使产品最大化

  

AXBXCXD

示例 N为60 ,数组为

  

30,20,15,12,10,6,5,4,3,2

找到四个整数的可能性很多,其中一些如下所示

可能性1

  

30 + 10 + 10 + 10 = 60->最终AXBXCXD = 30 * 10 * 10 * 10 = 30000

可能性2

  

15 + 15 + 15 + 15 = 60->最终AXBXCXD = 15 * 15 * 15 * 15 = 50625

正确答案是在所有可能的A,B,C,D整数集及其乘积中的50625,它必须是我们的最终输出。

另一个示例N是8

  

数组是2个整数4,2

用四个整数A,B,C,D求和的可能性仅为1,如下所示。

  

2 + 2 + 2 + 2 = 8最终输出2X2X2X2 = 16

如果数组没有这样的可能的四个整数组合来求和N,我们实际上必须打印-1。那是数组没有这种可能的整数的地方。

通过查看at this question,我了解了我们可以如何递归地解决问题以找出总计为N的数组子集。但是我不知道如何从上面强制执行确切的四个整数条件问题陈述。

1 个答案:

答案 0 :(得分:1)

  • 计算每对及其乘积的和
  • 按总和排序
  • 对于每一个将X相加的对,找出一个将N-X相加的乘积最高的对。
  • 将两对产品的乘积存储为该最大值和先前最大值之间的最大值
  • 完成后,显示最大产品

复杂度:O(n ^ 2 * 2 log n)。