主页有其他数据结构内容(持续更新中)
难度:Medium
代码:
利用积分图思想,是前缀和思想的二维版
在初始化阶段做预处理,创建integral矩阵
后续操作即数学问题
class NumMatrix {
vector<vector<int>> integral;
public:
NumMatrix(vector<vector<int>>& matrix) {
// 这两行代码可以加速C++的输入输出流
ios::sync_with_stdio(false);
cin.tie(0);
int m = matrix.size();
int n = (m > 0) ? matrix[0].size() : 0;
integral.resize(m + 1, vector<int>(n + 1));
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
integral[i][j] = integral[i - 1][j] + integral[i][j - 1] - integral[i - 1][j - 1] + matrix[i - 1][j - 1];
}
}
}
int sumRegion(int row1, int col1, int row2, int col2) {
ios::sync_with_stdio(false);
cin.tie(0);
return integral[row2 + 1][col2 + 1] - integral[row1][col2 + 1] - integral[row2 + 1][col1] + integral[row1][col1];
}
};