给定一个矩阵matrix, 其中的值有正 负 0 ,返回子矩阵的最大累加和
这个是 子数组最大累加和问题的 升级版
看例子就懂了:
如果只有两行,那么 上下两行相加,得出列加数组 得出最大累加和
总结整个过程,关键之处在于:
用求累加数组的最大累加和是的的方式得到每一步的最大子矩阵的累加和
每一步的累加数组可以利用前一步求出的累加数组很方便的更新得到
上代码:
package TT; public class Test77 { public static int maxSum(int[][] m){ if(m==null || m.length==0 || m[0].length==0){ return 0; } int max = Integer.MIN_VALUE; int cur = 0; int[] s = null; for(int i =0; i!=m.length; i++){ s = new int[m[0].length]; for (int j = i; j != m.length; j++) { cur = 0; for(int k =0; k!=s.length; k++){ s[k] +=m[j][k]; cur += s[k]; max = Math.max(max,cur); cur = cur <0 ? 0 : cur; } } } return max; } public static void main(String[] args){ int[][] a = new int[3][3]; a[0][0]=-90; a[0][1]=-48; a[0][2]=78; a[1][0]=64; a[1][1]=-40; a[1][2]=64; a[2][0]=-81; a[2][1]=-7; a[2][2]=66; int x = maxSum(a); System.out.println(x); } }
时间: 2024-11-05 15:17:38