数组中最小的两个整数和

时间:2016-11-19 12:06:12

标签: c arrays algorithm sorting

我有一个用整数填充的数组(排序或未排序,以较容易的方式,但在这里我将对其进行排序):

10,20,20,30,40

我尝试做的是获得这些数字的两个最小总和。在这种情况下,它应该是60,因为:

10+20+30 = 6020+40 = 60。我试图做的是当我对数组进行排序时,分开的数字是第一个左,右,左,右......但是我没有得到最小的总和。在这种情况下,使用我的算法,我会得到以下总和:

10+20+40 = 7020+30 = 50不是很有效。

您知道,我正在研究时间管理算法,因此我希望尽可能地获得最佳时间。

2 个答案:

答案 0 :(得分:0)

会有N!如果没有重复,则从N个数字中选择一个组的方法。生成所有可能的组。最佳组合的最小金额不低于总数的一半,因为其他数字的总和不超过一半。

答案 1 :(得分:0)

我认为这与装箱问题的精神更接近。 https://en.wikipedia.org/wiki/Bin_packing_problem

贪婪算法适用于您的测试用例

首先,对数组进行排序

[40,30,20,20,10]

初始化两个空箱

A = [] b = []

在每一步中,从数组中删除最大元素并将其放入具有最小总和的bin中(如果它们具有相等的总和,则将其放入A中)

对于您的阵列,其工作原理如下

step 0:
[40,30,20,20,10]
A=[] B=[]

step 1:
[30,20,20,10]
A=[40] B=[]

step 2:
[20,20,10]
A=[40] B=[30]

step 3:
[20,10]
A=[40] B=[30,20]

step 4:
[10]
A=[40,20] B=[30,20]

step 4:
[]
A=[40,20] B=[30,20,10]

你有理想的答案。当然,您可以找到失败的集合,它是一种近似算法。例如,[50,49,33,33,33]