zoukankan      html  css  js  c++  java
  • 算法总结之 子矩阵的最大累加和问题

       给定一个矩阵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);
              
              
             
             
         }
         
         
        
    }

  • 相关阅读:
    数据结构和算法关系
    x轴滚动
    常用Python第三方库简介
    devgridContral
    第一次线程使用经验总结
    调取图片出现的的内存泄露,导致大红叉
    IEEE754 处理数据变换
    c# 基础任务1
    Python-常用第三方库
    C#高性能大容量SOCKET并发(八):通讯协议
  • 原文地址:https://www.cnblogs.com/toov5/p/7493963.html
Copyright © 2011-2022 走看看