📜  查找 3D 数组的给定单元格之间的总和(1)

📅  最后修改于: 2023-12-03 15:10:42.762000             🧑  作者: Mango

查找 3D 数组的给定单元格之间的总和

如何查找一个 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 数组中给定单元格之间的总和,采用了计算前缀和的方式来实现。