JavaScript 动态规划 – 元素部分和

JavaScript 动态规划 – 元素部分和

在这个问题陈述中,我们的任务是计算数组的所有元素的和,每一步删除一个元素,并显示所有可能子数组的和的结果数组。并使用JavaScript功能来实现这个问题。

给定问题的逻辑

给定问题表明,我们需要计算除一个元素以外的每个元素的和。为了解决这个给定的问题,我们将定义一个数组作为输入,并通过每次迭代减去一个元素来返回元素和的数组作为输出。

我们将使用for循环来迭代数组的元素,并通过使用之前相同的方法消除当前元素来计算和。然后将这些和加到新的结果数组中。在每个阶段,当前元素将被更改。

步骤

步骤1 − 在程序开始时,声明一个整数数组,用于在每一步计算除一个元素以外的所有元素的和。在我们的代码中,如果数组中有5个元素,则计算4个元素的和。

步骤2 − 如果n是数组中存在的项数,则我们必须在数组中存储n-1项的和。所以为了存储和,我们将创建一个和的数组。

步骤3 − 在Javascript中,我们有一个称为reduce的方法,用于通过逐个迭代元素来更新数组的所有值。所以我们也将使用reduce方法来获取所有元素的和。

步骤4 − 在获得和后,将和推入结果变量中。

步骤5 − 现在初始化for循环并运行到数组长度。

步骤6 − 在这个阶段,我们将从数组中切片一个元素以获取n-1个项的和。

步骤7 − 在最后一步,将所有的结果和推入结果数组,并在控制台上获取输出。

代码

// array to calculate the part sum
const arr = [1, 2, 3, 4, 5];

// resultant array 
const sumArray = (arr = []) => arr.reduce((a, b) => a + b, 0);
const sumWithoutOne = (arr = []) => {
   const result = [sumArray(arr)];
   for (let i = 0; i < arr.length; i++) {
      const sum = sumArray(arr.slice(0, i).concat(arr.slice(i + 1)));
      result.push(sum);
   }
   return result;
};
console.log(sumWithoutOne(arr));

复杂性

在我们的代码中,我们使用了reduce方法,并且它的执行时间是O(n)。另外一个名为sumWithoutOne的函数使用了一个for循环和slice方法,它们也需要O(n)的时间,但是slice方法在for循环中被调用了n次,所以整体的时间复杂度将是O(n^2)。而空间复杂度为O(n),其中n是新数组中的和的数量。

总结性的评论

在上述算法中,我们看到了如何求解数组的某部分的和。如果一个数组有n个元素,我们通过从数组中每一步删除一个元素并创建一个新数组来计算n-1个元素的和。因此,这段代码的时间复杂度为O(n^2),空间复杂度为O(n)。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程