算法总结之 子矩阵的最大累加和问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法总结之 子矩阵的最大累加和问题相关的知识,希望对你有一定的参考价值。
给定一个矩阵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); } }
以上是关于算法总结之 子矩阵的最大累加和问题的主要内容,如果未能解决你的问题,请参考以下文章