第54天(中等题 数据结构)
打卡第五十四天
2道中等题

题目:

思路:

代码:
class Solution {
public:
int countSubmatrices(vector<vector<int>> &grid, int k) {
int ans = 0, m = grid.size(), n = grid[0].size();// m: grid的行数 n: grid的列数
vector<vector<int>> sum(m + 1, vector<int>(n + 1));// 创建二维前缀和数组sum,大小设为(m+1)×(n+1),比原网格多一行一列
// sum[i+1][j+1]存储从(0,0)到(i,j)的子矩阵和
for (int i = 0; i < m; i++) {// 遍历每一行
for (int j = 0; j < n; j++) {// 遍历每一列
sum[i + 1][j + 1] = sum[i + 1][j] + sum[i][j + 1] - sum[i][j] + grid[i][j];
// 计算前缀和sum[i+1][j+1]
// sum[i+1][j]:同一行,左边一列的前缀和
// sum[i][j+1]:上一行,同一列的前缀和
// sum[i][j]: 上一行,左边一列的前缀和
// grid[i][j]: 当前单元格的值
ans += sum[i + 1][j + 1] <= k;// 检查以(0,0)为左上角,(i,j)为右下角的子矩阵和是否≤k,如果子矩阵和≤k,则ans加1;否则加0
}
}
return ans;
}
};
耗时≈一小时 明天继续

浙公网安备 33010602011771号