📅  最后修改于: 2023-12-03 15:10:42.762000             🧑  作者: Mango
如何查找一个 3D 数组中给定单元格之间的总和?
给定一个三维数组 arr
,其中 arr[i][j][k]
表示三维空间中坐标为 (i,j,k)
的位置的值。现在我们有若干对 (i1,j1,k1)
和 (i2,j2,k2)
,需要找到 (i1,j1,k1)
和 (i2,j2,k2)
之间(包括端点)的所有元素的和。
由于题目要求求出两个坐标之间的所有元素和,因此我们可将具有相对位置的元素构成一个巨大的二维数组,然后计算该数组的二维前缀和。接着可对于每个询问进行较快的处理。时间复杂度为 $O(N^2)$。
class NumMatrix:
def __init__(self, matrix: List[List[int]]):
"""
Initialize your data structure here.
"""
m, n = len(matrix), len(matrix[0])
self.presum = [[0] * (n + 1) for _ in range(m + 1)]
for i in range(1, m + 1):
for j in range(1, n + 1):
self.presum[i][j] = matrix[i - 1][j - 1] + self.presum[i - 1][j] + self.presum[i][j - 1] - self.presum[i - 1][j - 1]
def sumRegion(self, row1: int, col1: int, row2: int, col2: int) -> int:
"""
Given the coordinates of two corners of a rectangle, return the sum of the rectangle's elements.
"""
return self.presum[row2 + 1][col2 + 1] - self.presum[row2 + 1][col1] - self.presum[row1][col2 + 1] + self.presum[row1][col1]
本篇文章介绍了如何查找一个 3D 数组中给定单元格之间的总和,采用了计算前缀和的方式来实现。