package com.interview.algorithms.array; /** * Created with IntelliJ IDEA. * User: stefanie * Date: 9/11/14 * Time: 3:30 PM */ public class C4_13_MaxSubMatrix { public static int find(int[][] matrix){ int[][] total = matrix; for (int i = 1; i < matrix[0].length; i++) { for (int j = 0; j < matrix.length; j++) { total[i][j] += total[i-1][j]; } } int maximum = Integer.MIN_VALUE; for (int i = 0; i < matrix.length; i++) { for (int j = i; j < matrix.length; j++) { //result 保存的是从 i 行 到第 j 行 所对应的矩阵上下值的和 int[] result = new int[matrix[0].length]; for (int f = 0; f < matrix[0].length; f++) { if (i == 0) { result[f] = total[j][f]; } else { result[f] = total[j][f] - total[i - 1][f]; } } int maximal = C4_29_MaxSubArraySum.max(result); if (maximal > maximum) { maximum = maximal; } } } return maximum; } }