303. Range Sum Query - Immutable

class NumArray {
private int[] sumSoFar;
public NumArray(int[] nums) {
sumSoFar = new int[nums.length + 1];
for (int i = 0; i < nums.length; i++) {
sumSoFar[i + 1] = sumSoFar[i] + nums[i];
}
}
public int sumRange(int i, int j) {
return sumSoFar[j + 1] - sumSoFar[i];
}
}

class NumMatrix {
private int[][] dpSum;
public NumMatrix(int[][] matrix) {
if (matrix == null || matrix.length == 0 || matrix[0] == null || matrix[0].length == 0) {
return;
}
int rows = matrix.length;
int cols = matrix[0].length;
dpSum = new int[rows + 1][cols + 1];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
dpSum[i+1][j+1] = dpSum[i+1][j] + dpSum[i][j+1] - dpSum[i][j] + matrix[i][j];
}
}
}
public int sumRegion(int row1, int col1, int row2, int col2) {
return dpSum[row2+1][col2+1] - dpSum[row1][col2+1] - dpSum[row2+1][col1] + dpSum[row1][col1];
}
}
网友评论