題目地址:
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];
}
}
初始化時空複雜度,查詢時空複雜度。