第54天(中等题 数据结构)

打卡第五十四天
2道中等题
image

题目:
image

思路:
image

代码:

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;
    }
};

耗时≈一小时 明天继续

posted @ 2025-12-14 00:12  Wy0518  阅读(1)  评论(0)    收藏  举报