1. 二维前缀和
一维前缀和的回顾
在一维前缀和中,我们用一个数组pre
来存储数组arr
的前缀和,pre[i]
表示从arr[0]
到arr[i]
的累加和。通过前缀和,我们可以在常数时间内求出任意区间[l, r]
的和,计算公式为: 区间和=pre[r]−pre[l−1]
二维前缀和的类比
在二维前缀和中,我们处理的是一个矩阵(二维数组)。假设有一个矩阵mat
,我们用一个二维数组pre
来存储二维前缀和。pre[i][j]
表示从矩阵的左上角(0,0)
到(i,j)
这个矩形区域内的所有元素的累加和。
二维前缀和的计算公式
假设矩阵mat
的大小为m×n
,二维前缀和pre
的计算公式如下: pre[i][j]=mat[i][j]+pre[i−1][j]+pre[i][j−1]−pre[i−1][j−1]
解释:
-
mat[i][j]
是当前元素。 -
pre[i - 1][j]
是当前行左边的累加和。 -
pre[i][j - 1]
是当前列上边的累加和。 -
pre[i - 1][j - 1]
是左上角重复计算的部分,需要减去。
类比理解: 想象一个棋盘,mat[i][j]
是一个棋子的价值,pre[i][j]