LeetCode 3070. 元素和小于等于 k 的子矩阵数目

LeetCode 3070. 元素和小于等于 k 的子矩阵数目

题目描述

给你一个大小为 m x n 的整数矩阵 grid 和一个整数 k。你需要找出 grid 中所有以左上角 (0,0) 为起始点的子矩阵,并统计这些子矩阵中元素和不超过 k 的个数。

注意 :子矩阵必须包含 (0,0) 这个格子,即子矩阵的左上角固定为原点,右下角可以是任意坐标 (i,j)(0 <= i < m, 0 <= j < n)。

思路分析

本题的暴力做法是枚举所有可能的子矩阵,并计算其和,但时间复杂度会达到 O(m²n²),不可取。由于子矩阵的左上角固定,我们可以利用二维前缀和 来快速得到任意从 (0,0) 到 (i,j) 的子矩阵的和。

二维前缀和

定义 s[i+1][j+1] 表示原矩阵中从 (0,0) 到 (i,j) 的子矩阵的元素和。这样 s[i][j] 就对应了以 (i-1,j-1) 为右下角的子矩阵的和(左上角为 (0,0))。

前缀和的递推公式(容斥原理):

复制代码
s[i+1][j+1] = s[i+1][j] + s[i][j+1] - s[i][j] + grid[i][j]

其中 s[0][*] 和 s[*][0] 均为 0,方便边界处理。

统计答案

构建完前缀和数组 s 后,我们只需要遍历所有可能的右下角坐标 (i,j)(i 从 1 到 m,j 从 1 到 n),检查 s[i][j] <= k 是否成立,如果成立则答案加一。

代码实现

cpp 复制代码
class Solution {
public:
    int countSubmatrices(vector<vector<int>>& grid, int k) {
        int m = grid.size(), n = grid[0].size();
        // 二维前缀和数组,大小为 (m+1) x (n+1)
        vector<vector<int>> s(m + 1, vector<int>(n + 1, 0));
        
        // 构建前缀和
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                s[i + 1][j + 1] = s[i + 1][j] + s[i][j + 1] - s[i][j] + grid[i][j];
            }
        }
        
        int ans = 0;
        // 枚举右下角
        for (int i = 1; i <= m; ++i) {
            for (int j = 1; j <= n; ++j) {
                if (s[i][j] <= k) ++ans;
            }
        }
        return ans;
    }
};

复杂度分析

  • 时间复杂度:O(m × n)。构建前缀和需要遍历所有格子,统计答案也需要遍历所有可能的右下角,因此总时间复杂度为 O(mn)。
  • 空间复杂度:O(m × n),用于存储二维前缀和数组。

总结

本题的核心是二维前缀和的应用。由于子矩阵的左上角固定为原点,前缀和数组可以直接对应每个可能子矩阵的和,从而将统计过程简化为一次遍历。掌握二维前缀和可以高效解决类似矩阵区域和的问题。

相关推荐
聪明蛋子哟8 分钟前
不仅仅是向量检索:结合知识图谱与Tool Calling的混合增强生成(Hybrid RAG)方案
人工智能·算法·知识图谱
Pniubi9 分钟前
力扣55跳跃游戏(贪心)
算法·leetcode·游戏
BSD_HY29 分钟前
薄膜开关矩阵扫描在低功耗 MCU 上的 GPIO 扩展
单片机·嵌入式硬件·矩阵
jyyyx的算法博客39 分钟前
传球游戏【思维】
算法
FL16238631291 小时前
关于2026年南昌大学811信号与系统最后一题电路系统解题思路
算法
殷色玫瑰1 小时前
C++ STL:map 与 set 详解——从底层红黑树到实际应用
c语言·数据结构·c++·算法·visualstudio·rpc
行者全栈架构师1 小时前
【鸿蒙心迹】鸿蒙网络请求架构实战——@ohos.net.http 到 Axios 封装、拦截器与统一错误处理(HarmonyOS 7.x)
前端·算法·架构
小宋10211 小时前
OpenTelemetry GenAI可观测性实战:串起模型、工具、Token与错误
java·人工智能·算法·贪心算法
嫂子开门我是_我哥1 小时前
青少年抑郁、焦虑、失眠与自杀相关表现的症状联系:一篇网络分析论文所使用的算法深度解读
论文阅读·算法·论文笔记
渊鱼L1 小时前
CAD随机颗粒插件2D V2.0 更新说明
算法