文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给出矩阵 matrix 和目标值 target,返回元素总和等于目标值的非空子矩阵的数量。

子矩阵 x1, y1, x2, y2 是满足 x1 <= x <= x2 且 y1 <= y <= y2 的所有单元 matrix[x][y] 的集合。

如果 (x1, y1, x2, y2)(x1', y1', x2', y2') 两个子矩阵中部分坐标不同(如:x1 != x1'),那么这两个子矩阵也不同。

示例 1:
输入:matrix =
[[0,1,0],[1,1,1],[0,1,0]], target = 0
输出:4
解释:四个只含 0 的 1x1 子矩阵。示例 2:
输入:matrix =
[[1,-1],[-1,1]], target = 0
输出:5
解释:两个 1x2 子矩阵,加上两个 2x1 子矩阵,再加上一个 2x2 子矩阵。提示:
1 <= matrix.length <= 300
1 <= matrix[0].length <= 300
-1000 <= matrix[i] <= 1000
-10^8 <= target <= 10^8

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-submatrices-that-sum-to-target
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 先递推求出,左上角(0,0)到(i, j)的区域的和
  • 然后枚举两个 行号,一个列号,求取两个行夹住的区域的前缀和,利用哈希记录前缀和出现的次数
  • 时间复杂度 O(m2n)O(m^2n)O(m2n)
class Solution {public:int numSubmatrixSumTarget(vector<vector<int>>& matrix, int target) {int m = matrix.size(), n = matrix[0].size();vector<vector<int>> presum(m+1, vector<int>(n+1, 0));for(int i = 1; i <= m; i++) {for(int j = 1; j <= n; j++){presum[i][j] = matrix[i-1][j-1]+presum[i-1][j]+presum[i][j-1]-presum[i-1][j-1];}}// 左上角 [0,0] 到 右下角[i,j] 的 前缀和int ans = 0;for(int i1 = 1; i1 <= m; i1++){for(int i2 = i1; i2 <= m; i2++){   //枚举两个顶点的 行的 idx 组合unordered_map<int,int> map; // 和,计数for(int j = 1; j <= n; j++){int sum = presum[i2][j]-presum[i1-1][j];//两行夹住的区域if(sum == target)ans++;if(map.find(sum-target) != map.end()){ans += map[sum-target];}map[sum]++;}}}return ans;}
};

1604 ms 158 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1074. 元素和为目标值的子矩阵数量(2d前缀和+哈希)相关推荐

  1. leetcode 1074. 元素和为目标值的子矩阵数量(map+前缀和)

    给出矩阵 matrix 和目标值 target,返回元素总和等于目标值的非空子矩阵的数量. 子矩阵 x1, y1, x2, y2 是满足 x1 <= x <= x2 且 y1 <= ...

  2. 1074. 元素和为目标值的子矩阵数量

    给出矩阵 matrix 和目标值 target,返回元素总和等于目标值的非空子矩阵的数量. 子矩阵 x1, y1, x2, y2 是满足 x1 <= x <= x2 且 y1 <= ...

  3. leetcode 1074. Number of Submatrices That Sum to Target(和为target的子矩阵个数)

    题目中让找出有多少个子矩阵,其元素的和为target. 子矩阵的范围:x1 <= x <= x2, y1 <= y <= y2 4个边界有任一个不同,都算不同的子矩阵. 思路: ...

  4. LeetCode 5655 重新排列后的最大子矩阵

    LeetCode 5655 重新排列后的最大子矩阵 题目链接 给你一个二进制矩阵 matrix ,它的大小为 m x n ,你可以将 matrix 中的 列 按任意顺序重新排列. 请你返回最优方案下将 ...

  5. 【LeetCode 深度优先搜索专项】不同岛屿的数量 II(711)

    文章目录 1. 题目 1.1 示例 1.2 说明 1.3 提示 1.4 进阶 2. 解法一(深度优先搜索) 2.1 分析 2.2 解答 2.3 复杂度 1. 题目 给定一个 m×nm \times n ...

  6. LeetCode 2148. 元素计数

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数数组 nums ,统计并返回在 nums 中同时具有一个严格较小元素和一个严格较大元素的元素数目. 示例 1: 输入:nums = [11,7 ...

  7. LeetCode 1727. 重新排列后的最大子矩阵(前缀和+排序)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个二进制矩阵 matrix ,它的大小为 m x n ,你可以将 matrix 中的 列 按任意顺序重新排列. 请你返回最优方案下将 matrix ...

  8. LeetCode 1292. 元素和小于等于阈值的正方形的最大边长(DP)

    1. 题目 给你一个大小为 m x n 的矩阵 mat 和一个整数阈值 threshold. 请你返回元素总和小于或等于阈值的正方形区域的最大边长: 如果没有这样的正方形区域,则返回 0 . 示例 1 ...

  9. LeetCode 1521. 找到最接近目标值的函数值(位运算)

    文章目录 1. 题目 2. 解题 1. 题目 Winston 构造了一个如上所示的函数 func .他有一个整数数组 arr 和一个整数 target ,他想找到让 |func(arr, l, r) ...

最新文章

  1. python excel行数_使用python计算excel中的行数
  2. Dataset之CIFAR-10:CIFAR-10数据集简介、下载、使用方法之详细攻略
  3. 2021年1月10日停电感慨
  4. hdu 1022 Train Problem I 解题报告
  5. 1. VIM 系列 - 简单入门,拾起兴趣
  6. tailf、tail -f、tail -F 指令
  7. LeetCode 第 27 场双周赛(1125/1966,前57.2%)
  8. C++带参数控制台(实例)
  9. 项目经理的商务指南系列之四:认识谈判(不做传声筒,不做顶门闩,进退之策,进退之法,有机事者必有机心)...
  10. 微软05年面临的10大挑战
  11. python自动qq群发_自动给qq好友发消息
  12. 使用Foxmail管理hotmail邮箱时,只能接收邮件而无法发送邮件的就解决办法
  13. 1.13 打印机和工作簿的打印设置 [原创Excel教程]
  14. Remo Repair PowerPoint(PPT修复工具)v2.0官方版
  15. maya python 的简单使用
  16. 一键生成Springboot Vue项目! 【私活神器】
  17. PDF生成插件--TcPDF
  18. 判断系统是centos还是ubuntu的linux命令
  19. python 程序运行计时 动态_python中time库clock 使用Python,实现程序运行计时的数码管表示...
  20. vue实例的生命周期详解

热门文章

  1. mac显示无法连接adobe服务器,Mac安装Adobe软件,如遇Error提示解决方法
  2. android 初始化语言,Android Init Language(安卓初始化语言)
  3. 分词之后的如何做特征选择_特征选择怎么做?这篇文章告诉你
  4. 校内模拟赛 Zbq's Music Challenge
  5. [JSOI2007]建筑抢修 (贪心)
  6. 点击开启此虚拟机时,出现“该虚拟机似乎正在使用中”问题
  7. 汇编中调用函数(类比c
  8. Spring中RedirectAttributes对象重定向传参
  9. 使用bootstrap-table插件
  10. .net String.Format数字格式化输出