问题:
1. 求二维数组(矩阵)的子矩阵之和的最大值。
2. 求三维数组(长方体)的子方体之和的最大值。
解法:
先计算出以左上角的元素(1,1)和当前元素(i,j)为顶点对的子矩阵的部分和,部分和的计算如下
PS[i][j] = A[i][j]+PS[i-1][j]+PS[i][j-1]-PS[i-1][j-1]
在上一篇文章中我们发现一维的解答可以线性完成,这里我们把问题从二维转化为一维以提高算法性能。
假设已经确定了矩阵区域的上下边界,不如知道矩阵区域的上下边界分布是第a行和第c行,接下来要确定左右边界。
我们把第a行和第c行之间的每一列看成一个整体,相当于一维数组中的一个元素(通过子矩阵部分和可以在O(1)时间内计算出整体之和)。