Submatirix Sum(とゼロのサブマトリックス)

1345 ワード

http://www.lintcode.com/en/problem/submatrix-sum/?rand=true Range Sum Query 2 D-Immutableを参照してください。
public class Solution {
    /*
     * @param matrix: an integer matrix
     * @return: the coordinate of the left-up and right-down number
     */
    public int[][] submatrixSum(int[][] matrix) {
        // write your code here
        int[][] res = new int[2][2];
        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] = matrix[i - 1][j - 1] + sum[i][j - 1] + sum[i - 1][j] - sum[i - 1][j - 1];
            }
        }
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                int[] start = {i - 1, j - 1};
                for (int k = i; k <= m; k++) {
                    for (int l = j; l <= n; l++) {
                        int[] end = {k - 1, l - 1};
                        if (sum[k][l] - sum[k][j - 1] - sum[i - 1][l] + sum[i - 1][j - 1] == 0) {
                            res[0] = start;
                            res[1] = end;
                            return res;
                        }
                    }
                }
            }
        }
        return res;
    }
}