个人作业3
二维数组求最大子矩阵的和
简单分析 ; 二维数组 是一维数组的 扩充
先遍历一维数组的 子数组
在将 下一行与上一行相加 变成 n-1行 仍然是遍历一维数组 以此类推。但是时间复杂度比较大
代码
package main; import java.util.Scanner; public class SumOfSubMatrix { public static void main(String[] args) { // TODO Auto-generated method stub // int arr[][]={{1,2,-3},{3,4,-5},{-5,-6,-7}}; Scanner sc= new Scanner(System.in); while(sc.hasNext()) { int n= sc.nextInt(); int arr[][]=new int [n][n]; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { arr[i][j]=sc.nextInt(); } } System.out.println(sumOfSubMatrix(arr,n)); } } public static int sumOfSubMatrix(int a[][],int n) { int max=Integer.MIN_VALUE; //res保存的是从 i 行 到第 j 行 所对应的矩阵上下值的和 for(int i=0;i<n;i++) { int res[]=new int[n]; for(int j=i;j<n;j++) { for(int k=0;k<n;k++) { res[k]+=a[j][k]; } int maxNum=sumOfSubArray(res); if(maxNum>max) max=maxNum; } } return max; } public static int sumOfSubArray(int arr[]) { if(arr.length==0||arr==null) return 0; int max=Integer.MIN_VALUE; int cur=0; for(int i=0;i<arr.length;i++) { cur+=arr[i]; max=Math.max(max, cur); cur=cur<0?0:cur; } return max; } }