题目地址:
https://leetcode.com/problems/range-sum-query-2d-immutable/
给定一个二维矩阵,要求设计一个数据结构,可以实现查询左上从,右下到范围内矩阵数字的和的操作。
思路是前缀和。令是原矩阵位于前行前列的所有数字的和,规定,那么有查询的时候,利用前缀和做差即可。代码如下:
public class NumMatrix {
private int[][] prefixSum;
public NumMatrix(int[][] matrix) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return;
}
int n = matrix.length, m = matrix[0].length;
prefixSum = new int[n + 1][m + 1];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
prefixSum[i][j] = matrix[i - 1][j - 1] + prefixSum[i - 1][j] + prefixSum[i][j - 1] - prefixSum[i - 1][j - 1];
}
}
}
public int sumRegion(int row1, int col1, int row2, int col2) {
return prefixSum[row2 + 1][col2 + 1] - prefixSum[row2 + 1][col1] - prefixSum[row1][col2 + 1] + prefixSum[row1][col1];
}
}
初始化时空复杂度,查询时空复杂度。