class Solution:
def matrixBlockSum(self, mat: List[List[int]], K: int) -> List[List[int]]:
m, n = len(mat), len(mat[0])
s = [[0] * (n + 1)] + [[0, *itertools.accumulate(row)] for row in mat]
for i, j in itertools.product(range(1, m + 1), range(1, n + 1)):
s[i][j] += s[i - 1][j]
def area(i, j):
a = min(i + K, m - 1) + 1
b = min(j + K, n - 1) + 1
c = max(i - K, 0)
d = max(j - K, 0)
return s[a][b] + s[c][d] - s[a][d] - s[c][b]
return [[area(i, j) for j in range(n)] for i in range(m)]
其中重要的点
1、在上边和左边扩充矩阵
2、初始化dp
3、itertools的使用
4、S公式套用
本文介绍了一种高效的矩阵块求和算法,通过在矩阵的上边和左边进行扩充,并利用itertools库和动态规划思想,实现了快速计算任意矩形区域内的元素总和。该算法适用于大数据集的快速统计分析。
304

被折叠的 条评论
为什么被折叠?



