zoukankan      html  css  js  c++  java
  • [程序员代码面试指南]数组和矩阵-子矩阵的最大累加和问题

    题解

    • 固定行数的矩阵的最大值可以压缩成一维数组做,做一维数组时当sum<0则丢弃到已累加的部分。
    • 固定行树为:从起始行i到k行,压缩成一维数组,再遍历列j。时间复杂度由O(n4)降到O(n3),因为一维时比较次数降到O(n)。

    代码

    public class Main {
    	public static void main(String args[]) {
    		int[][] m= {{-90,48,78},{64,-40,64},{-81,-7,66}};
    		System.out.println(maxMatrixSum(m));
    	}
    	
    	public static int maxMatrixSum(int[][] m) {
    		if(m.length==0||m[0].length==0) {
    			return 0;
    		}
    		
    		int max=Integer.MIN_VALUE;
    		for(int i=0;i<m.length;++i) {
    			int[] arr=new int[m[0].length];
    			for(int k=i;k<m.length;++k) {
    				int sum=0;//
    				for(int j=0;j<m[0].length;++j) {
    					arr[j]+=m[k][j];
    					sum=sum+arr[j];//分开做
    					sum=sum<0?0:sum;//
    				}
    				max=sum>max?sum:max;
    			}
    		}
    		return max;
    	}
    }
    
  • 相关阅读:
    phpcms页面替换
    phpcms笔记
    php头像上传预览
    phpcms后台管理
    php写流程管理
    php写留言板
    php人员权限管理(RBAC)
    单例模式
    Effective C++笔记——day01
    C++Primer笔记-----day08
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/11070806.html
Copyright © 2011-2022 走看看