Range Sum Query 2D - Mutable

http://www.lintcode.com/zh-cn/problem/range-sum-query-2d-mutable/

public class NumMatrix {
    private int[][] matrix;
    private int[][] sum;

    /**
     * @return: nothing
     */
    public NumMatrix(int[][] matrix) {
        // Write your code here
        this.matrix = matrix;
        sum = new int[matrix.length + 1][matrix[0].length + 1];
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                sum[i + 1][j + 1] = sum[i][j + 1] + sum[i + 1][j] + matrix[i][j] - sum[i][j];
            }
        }
    }

    public void update(int row, int col, int val) {
        int diff = val - matrix[row][col];
        for (int i = row; i < matrix.length; i++) {
            for (int j = col; j < matrix[0].length; j++) {
                sum[i + 1][j + 1] += diff;
            }
        }
         matrix[row][col]=val;
    }

    public int sumRegion(int row1, int col1, int row2, int col2) {
        return sum[row2 + 1][col2 + 1] - sum[row2 + 1][col1] - sum[row1][col2 + 1] +
                sum[row1][col1];
    }
}

你可能感兴趣的:(Range Sum Query 2D - Mutable)