数组数组的部分和 JavaScript
在给定的问题陈述中,我们的任务是借助 Javascript 功能获取数组数组的部分和。因此,我们将计算行的总和并给出结果。
理解问题
手头的问题是计算数组数组的部分和。因此,首先了解什么是数组数组!数组数组意味着每个项目代表一个数组本身。例如,请参阅下面的数组:
[
[11, 12, 13],
[14, 15, 16],
[17, 18, 19]
]
位置 (i, j) 处的部分和是从输入数组左上角到位置 (i, j) 处的元素的所有元素的总和。
算法
步骤 1:由于我们必须计算数组数组中的部分和,因此首先我们将创建一个函数来计算给定数组的部分和,并将其命名为 sumOfSubarrays。并将数组参数作为 arr 传递。
步骤 2:定义函数后,在函数内部首先检查输入数组是否为空,如果为空则返回。
步骤 3:计算输入数组的行数和列数。
步骤 4:创建一个 2D 数组来存储部分和的结果。
步骤 5:迭代输入数组的每个元素,并根据位置和先前计算的部分和计算每个项目的部分和。
步骤 6:使用公式计算位置 (i, j) 处的部分和。
步骤 7:公式使用前一行和前一列的值。同时减去左上角的值以避免重复计算。
示例
function sumOfSubarrays(arr) {
if (arr.length === 0) return [];
const numRows = arr.length;
const numCols = arr[0].length;
// 创建一个二维数组来存储部分和
const partialSums = new Array(numRows);
for (let i = 0; i < numRows; i++) {
partialSums[i] = new Array(numCols);
}
// 计算部分和
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),因为我们以相同的长度存储给定数组的总和。
结论
正如我们在算法中看到的,我们使用了一种动态方法来获取给定数组的部分和。并且该函数适用于任何大小的数组。
相关文章
有用资源
javascript 参考教程 - 该教程包含有关 javascript 的更多信息:https://www.cainiaomax.com/javascript/

