304. Range Sum Query 2D - Immutable
Given matrix = [
[3, 0, 1, 4, 2],
[5, 6, 3, 2, 1],
[1, 2, 0, 1, 5],
[4, 1, 0, 1, 7],
[1, 0, 3, 0, 5]
]
sumRegion(2, 1, 4, 3) -> 8
sumRegion(1, 1, 2, 2) -> 11
sumRegion(1, 2, 2, 4) -> 12class NumMatrix {
public:
NumMatrix(vector<vector<int>> matrix) { // time: O(m * n); space: O(m * n)
int m = matrix.size(), n = m ? matrix[0].size() : 0;
sums = vector<vector<int> > (m + 1, vector<int>(n + 1, 0)); // pad zero row and col
for (int i = 1; i <= m; ++i) {
for (int j = 1; j <= n; ++j) {
sums[i][j] = matrix[i - 1][j - 1] + sums[i - 1][j] + sums[i][j - 1] - sums[i - 1][j - 1];
}
}
}
int sumRegion(int row1, int col1, int row2, int col2) { // time: O(1)
return sums[row2 + 1][col2 + 1] - sums[row2 + 1][col1] - sums[row1][col2 + 1] + sums[row1][col1];
}
vector<vector<int> > sums; // sums[i][j]: accumulative sum from (0, 0) to (i - 1, j - 1)
};Last updated
