Skip to content

Commit c25d531

Browse files
authored
Create matrix-block-sum.cpp
1 parent 2103650 commit c25d531

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

C++/matrix-block-sum.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Time: O(m * n)
2+
// Space: O(m * n)
3+
4+
class Solution {
5+
public:
6+
vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int K) {
7+
int m = mat.size(), n = mat[0].size();
8+
vector<vector<int>> accu(m + 1, vector<int>(n + 1));
9+
for (int i = 0; i < m; ++i) {
10+
for (int j = 0; j < n; ++j) {
11+
accu[i + 1][j + 1] = accu[i + 1][j] + accu[i][j + 1] - accu[i][j] + mat[i][j];
12+
}
13+
}
14+
vector<vector<int>> result(m, vector<int>(n));
15+
for (int i = 0; i < m; ++i) {
16+
for (int j = 0; j < n; ++j) {
17+
int r1 = max(i - K, 0), c1 = max(j - K, 0);
18+
int r2 = min(i + K + 1, m), c2 = min(j + K + 1, n);
19+
result[i][j] = accu[r2][c2] - accu[r1][c2] - accu[r2][c1] + accu[r1][c1];
20+
}
21+
}
22+
return result;
23+
}
24+
};

0 commit comments

Comments
 (0)