题目:
给定一个矩阵matrix,其中的值有正、有负、有0,返回子矩阵的最大累加和。
例如,matrix为︰
-1 -1 -1
-1 2 2
-1 -1 -1
其中最大累加和的子矩阵为︰2 2
所以返回4。
思路:
以第一行作为起始行,每行按列相加
时间复杂度O(n³)
package 多维数组与矩阵;
import java.util.Arrays;
public class case06_子矩阵的最大累加和 {
public static void main(String[] args) {
int[][] arr=new int[][]{
{-90,78,45},
{80,78,-45},
{-56,76,34},
};
arr=new int[][]{{1,2,-1}};
int res=maxSum(arr);
System.out.println(res);
}
private static int maxSum(int[][] arr) {
int beginRow=0;//以它为起始行
final int M=arr.length;//行数
final int N=arr[0].length;//列数
int[] sums=new int[N];//按列求和
int max=0;//历史最大子矩阵和
while(beginRow<M){//起始行到第i行
for(int i=beginRow;i<M;i++){
//按列累加
for(int j=0;j<N;j++){
sums[j]+=arr[i][j];
}
//累加完成
int t=case05_子数组的最大累加和.findMaxSum(sums);
if(t>max){
max=t;
}
}
//另一行作为起始行时要将sums清零
Arrays.fill(sums,0);
beginRow++;
}
return max;
}
}