Java算法–第四章–多维数组和矩阵(6)题目:子矩阵最大累加和
给定一个矩阵matrix,其中的值有正、有负、有0,返回子矩阵的最大累加和。
例如,matrix为∶
-1 -1 -1
-1 2 2
-1 -1 -1
其中最大累加和的子矩阵为︰2 2
所以返回4。
代码:
package matrix;
import java.util.Arrays;
public class MaxSubMatrix {
public static void main(String[] args) {
int[][] matrix = {
{-90,48,78},
{64,-40,64},
{-81,-7,66}
};
int res = maxSum(matrix);
System.out.println(res);
}
//O(n³)时间复杂度
private static int maxSum(int[][] matrix) {
int beginRow = 0;// 以它为起始行
final int M = matrix.length;
final int N = matrix[0].length;
int[] sums = new int[N];//按列求和
int max = 0;//历史上最大的子矩阵和
while (beginRow < M) {// 起始行
for (int i = beginRow; i < M; i++) {// 累加行
for (int j = 0; j < N; j++) {
sums[j] += matrix[i][j];
}
// 累加完成
int t = MaxSumArray.findByDp(sums);//见上一节
if (t > max)
max = t;
}
Arrays.fill(sums, 0);//将sums中的每个元素都快速的设置为0
beginRow++;
}
return max;
}
}
输出:
126,left = 1,right = 2
150,left = 1,right = 2
209,left = 1,right = 2
88,left = 0,right = 2
130,left = 2,right = 2
66,left = 2,right = 2
209