给定一个列表A(大小为N)的正整数(0到1000之间),您必须通过一次累加2个元素并添加前一个结果来合并列表中的所有元素。
例如,O = {P,Q,R},可以通过3种不同的方式合并:
您必须找到合并列表并返回列表所需的最小总和。
例如,A = {100,250,1000},三种可能的合并策略是:
最小的总和是1700。
要解决此问题,我的方法是,从逻辑上讲,如果对列表进行排序并仅简单地添加最小的元素,它将返回正确的结果:
public static int Solution(int[] A)
{
if (A.Length < 2)
return 0;
var max = 0;
Array.Sort(A);
var current = A[0];
for(var i = 1; i<A.Length; i++)
{
current += A[i];
max += current;
}
return max;
}
有什么想法吗?
编辑:这是一项在线评估,但没有任何答案就被拒绝了,我只是想提高自己并了解为什么这是错误的
答案 0 :(得分:2)
之所以失败,是因为如果合并数量的排序顺序未保持不变,则合并2个元素的成本总会累计累计到总成本中。
例如-
[20,40,40,50]
因此,总费用为 310 。
如您所见,60
在合并时处于错误的阶段(在 [60,40,50] ),我们可以在其中合并 [ 40,50] 。
解决方案:
[20,40,40,50]
60
向后插入,将其插入优先级队列)。因此,总费用为 300 ,比通过静态排序顺序获得的费用少10
。