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

给你一个下标从 0 开始的整数矩阵 grid 和一个整数 k。

返回包含 grid 左上角元素、元素和小于或等于 k 的 子矩阵的数目。

示例 1:

复制代码
输入:grid = [[7,6,3],[6,6,1]], k = 18
输出:4
解释:如上图所示,只有 4 个子矩阵满足:包含 grid 的左上角元素,并且元素和小于或等于 18 。

示例 2:

复制代码
输入:grid = [[7,2,9],[1,5,0],[2,6,6]], k = 20
输出:6
解释:如上图所示,只有 6 个子矩阵满足:包含 grid 的左上角元素,并且元素和小于或等于 20 。

提示:

  • m == grid.length
  • n == grid[i].length
  • 1 <= n, m <= 1000
  • 0 <= grid[i][j] <= 1000
  • 1 <= k <= 10^9

分析:求出二维前缀和,统计有多少个和的值小于等于 k 即可。

cpp 复制代码
int countSubmatrices(int** grid, int gridSize, int* gridColSize, int k) {
    int n=gridSize,m=gridColSize[0],ans=0,sum[n+5][m+5];
    if(grid[0][0]>k)return 0;
    else ans=1;
    sum[0][0]=grid[0][0];
    for(int i=1;i<n;++i)
    {
        sum[i][0]=sum[i-1][0]+grid[i][0];
        if(sum[i][0]<=k)ans++;
    }
    for(int i=1;i<m;++i)
    {
        sum[0][i]=sum[0][i-1]+grid[0][i];
        if(sum[0][i]<=k)ans++;
    }
    for(int i=1;i<n;++i)
        for(int j=1;j<m;++j)
        {
            sum[i][j]=grid[i][j]-sum[i-1][j-1]+sum[i-1][j]+sum[i][j-1];
            if(sum[i][j]<=k)ans++;
        }
            
    return ans;
}
相关推荐
yi0117 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
好想像大佬一样能够ak所有11 小时前
Leetcode35.搜索插入位置
数据结构·算法·leetcode
aqiu11111111 小时前
【C++算法打怪专栏】LeetCode 165. 比较版本号(双指针与字符串流法)
c++·算法·leetcode
垆边人似月.14 小时前
华为OD算法题:查找众数及中位数
数据结构·算法·leetcode
CoderYanger15 小时前
一轮复习——F.动态规划模型总结(入门篇)
java·开发语言·数据结构·算法·leetcode·职场和发展·动态规划
浅念-16 小时前
动态规划专题:斐波那契数列模型 + 网格路径DP(LeetCode例题全解析)
笔记·算法·leetcode·面试·职场和发展·动态规划·推荐算法
夏幻灵16 小时前
每日一题:LeetCode 20:有效的括号——栈与哈希映射详解
算法·leetcode·哈希算法
Nil20817 小时前
leetcode 279完全平方数
算法·leetcode·职场和发展
longlongzihan17 小时前
前缀积与后缀积 —— LeetCode 238. 除了自身以外数组的乘积
开发语言·c++·leetcode
All for pursuit.17 小时前
【动态规划-1】121.买卖股票的最佳时机
数据结构·c++·算法·leetcode·动态规划