Maximum Submatrix

public class Solution {
    /**
     * @param matrix: the given matrix
     * @return: the largest possible sum
     */
    public int maxSubmatrix(int[][] matrix) {
        // write your code here
        if(matrix.length == 0 || matrix[0].length == 0){
            return 0;
        }
        int m = matrix.length;
        int n = matrix[0].length;
        int[][] sum = new int[m+1][n+1];
        for(int i = 1; i <= m; i++){
            for(int j = 1; j <= n; j++){
                sum[i][j] = sum[i-1][j] + matrix[i-1][j-1];
            }
        }
        int max = Integer.MIN_VALUE;
        for(int i = 0; i <= m; i++){
            for(int j = i+1; j <= m; j++){
                int cur = 0;
                for(int k = 1; k <= n; k++){
                    cur += (sum[j][k] - sum[i][k]);
                    max = Math.max(cur, max);
                    cur = Math.max(0, cur);
                }
            }
        }
        return max;
    }
}

最后更新于

这有帮助吗?