动态编程-部分元素之和

假设我们有一个这样的数字数组-

const arr = [1, 2, 3, 4, 5];

每次减少一个元素,该数组可以像这样分离出来-

[1, 2, 3, 4, 5]
[2, 3, 4, 5]
[3, 4, 5]
[4, 5]
[5]
[]

我们需要编写一个包含一个这样的数组的JavaScript函数。该函数应以上述相同的方式将数组分开。

然后,该函数应构造一个包含这些部分各自总和的数组并返回该数组。

因此,对于此数组,输出应类似于-

const output = [15, 14, 12, 9, 5 0];

我们将使用动态编程来解决此问题。我们将首先计算O(n)时间内完整数组的总和,最终将成为数组的第一个元素。然后在另一个迭代中,我们将继续减去相应的元素以获得输出数组元素。这样,我们可以在O(n)时间和O(1)空间中解决此问题。

示例

const arr = [1, 2, 3, 4, 5];
const sumArray = (arr = []) => arr.reduce((a, b) => a + b, 0);
const partialSum = (arr = []) => {
   let sum = sumArray(arr);
   const res = [sum];
   for(let i = 0;
   i < arr.length; i++){
      const el = arr[i];
      sum -= el;
      res.push(sum);
   };
   return res;
};
console.log(partialSum(arr));

输出结果

这将产生以下输出-

[ 15, 14, 12, 9, 5, 0 ]