JavaScript 数组嵌套数组中的部分和


在给定的问题陈述中,我们的任务是借助 Javascript 功能获取数组嵌套数组中的部分和。因此,我们将计算行的总和并给出结果。

理解问题

手头的问题是计算数组嵌套数组的部分和。所以首先理解什么是数组嵌套数组!数组嵌套数组表示每个项目本身代表一个数组。例如,参见下面的数组嵌套数组

[

[11, 12, 13],

[14, 15, 16],

[17, 18, 19]

]

位置 (i, j) 处的部分和是从输入数组的左上角到位置 (i, j) 处元素的所有元素的总和。

算法

步骤 1:由于我们必须计算数组嵌套数组中的部分和,因此我们首先将创建一个函数来计算给定数组的部分和,并将其命名为 sumOfSubarrays。并传递数组作为参数 arr。

步骤 2:定义函数后,在函数内部首先检查输入数组是否为空,如果为空则返回。

步骤 3:计算输入数组中的行数和列数。

步骤 4:创建一个二维数组来存储部分和的结果。

步骤 5:遍历输入数组的每个元素,并根据位置和先前计算的部分和计算每个项目的局部和。

步骤 6:位置 (i, j) 处的部分和使用以下公式计算。

步骤 7:该公式使用前一行和前一列的值。并减去左上角的值以避免重复计数。

示例

function sumOfSubarrays(arr) {
   if (arr.length === 0) return [];

   const numRows = arr.length;
   const numCols = arr[0].length;

   // Create a 2D array to store the partial sums
   const partialSums = new Array(numRows);
   for (let i = 0; i < numRows; i++) {
      partialSums[i] = new Array(numCols);
   }

   // Compute the partial sums
   for (let i = 0; i < numRows; i++) {
      for (let j = 0; j < numCols; j++) {
         if (i === 0 && j === 0) {
            partialSums[i][j] = arr[i][j];
         } else if (i === 0) {
            partialSums[i][j] = partialSums[i][j - 1] + arr[i][j];
         } else if (j === 0) {
            partialSums[i][j] = partialSums[i - 1][j] + arr[i][j];
         } else {
            partialSums[i][j] = partialSums[i - 1][j] + partialSums[i][j - 
1] - partialSums[i - 1][j - 1] + arr[i][j];
         }
      }
   }

   return partialSums;
}

// Example usage
const array = [
   [1, 2, 3],
   [4, 5, 6],
   [7, 8, 9]
];

const result = sumOfSubarrays(array);
console.log(result);

输出

[ [ 1, 3, 6 ], [ 5, 12, 21 ], [ 12, 27, 45 ] ]

复杂度

在数组嵌套数组中查找部分和的时间复杂度为 O(n),对于上述函数以获取给定数组的部分和。并且该函数的空间复杂度也为 O(n),因为我们正在存储与相同长度的给定数组的总和。

结论

正如我们在算法中看到的,我们使用了动态方法来获取给定数组的部分和。并且该函数适用于任何大小的数组。

更新于:2023年8月16日

215 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.