通过使用数组中的所有数字找到最小可能总和

时间:2016-08-19 14:35:27

标签: arrays algorithm

我从数组中找到最小可能的总和。例如数组如果{1,2,3,4}。现在,我想找到上述数组中的最小可能总和,例如(1 + 2)=3(3+3)=6(4+6)=10。这导致3+6+10=19。什么是最佳解决方案?

3 个答案:

答案 0 :(得分:5)

  1. 排序列表低 - >高
  2. 总和2个最低值(low1+low2 = pair),将其添加到总数
  3. 已移除low1low2已移除,pair已包含
  4. 的度假村列表
  5. 重复2-3,直到保留1个值,将其添加到总计
  6. 总数最小化
  7. 证明与最佳编码的霍夫曼编码证明相同

答案 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);