我从数组中找到最小可能的总和。例如数组如果{1,2,3,4}
。现在,我想找到上述数组中的最小可能总和,例如(1 + 2)=3
,(3+3)=6
,(4+6)=10
。这导致3+6+10=19
。什么是最佳解决方案?
答案 0 :(得分:5)
low1+low2 = pair
),将其添加到总数low1
且low2
已移除,pair
已包含证明与最佳编码的霍夫曼编码证明相同
答案 1 :(得分:0)
找到最小值并删除它,然后在第一个删除后找到下一个最小值并将两者加在一起。
答案 2 :(得分:0)
在javascript中:
let x = [1, 2, 2, 2, 3];
let y = [];
// check if we have more then 2 values left in the array
while(x[1] != undefined)
// sort to make sure we get lowest values combined
// add lowest two values, remove the second
// push result in new array
x.sort() && y.push(x[0] = x[0] + x.splice(1, 1)[0]);
// add all results
let result = y.reduce((a, b) => a + b, 0);
console.log(result);

您可以创建一个函数,为您传入的每个数组执行此操作。如果你正在进行函数式编程,这非常酷:
const array = [1, 2, 2, 2, 3];
const add = (x, y = []) => (
(x, y) => x.sort() &&
y.push(x[0] = x[0] + x.splice(1, 1)[0]) &&
x[1] ?
add(x, y) :
y.reduce((a, b) => a + b, 0))(x.slice(), y);
console.log(add(array));
// the original array is unmodified
console.log(array);