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

文章目录

    • 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
解释:四个只含 01x1 子矩阵。示例 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阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最炫国漫《雾山五行》用 Python 了解一下到底有多优秀

看动漫的小伙伴应该知道最近出了一部神漫《雾山五行》&#xff1a; 1、极具特色的水墨画风和超燃的打斗场面广受好评 2、首集播出不到 24 小时登顶 B 站热搜第一&#xff0c;豆瓣开分 9.5&#xff0c; 火爆程度可见一斑&#xff0c;就打斗场面而言&#xff0c;说是最炫动漫也…

LeetCode 982. 按位与为零的三元组(位运算+计数)

文章目录1. 题目2. 解题1. 题目 给定一个整数数组 A&#xff0c;找出索引为 (i, j, k) 的三元组&#xff0c;使得&#xff1a; 0 < i < A.length 0 < j < A.length 0 < k < A.length A[i] & A[j] & A[k] 0&#xff0c;其中 & 表示按位与&…

雷军一往无前的十年(小米十周年公开演讲)附赠《一往无前》电子书籍

▲雷军 | 中国企业家俱乐部理事、小米科技董事长 做全球最好的手机&#xff0c;只卖一半的价钱&#xff0c;让每个人都能买得起——如何能够实现这个看上去、听上去都不靠谱的目标&#xff1f; 来源 | 雷军公众号分享 | 雷军 2020年8月11日19:30&#xff0c;小米十周年&#x…

LeetCode 1147. 段式回文(贪心)

文章目录1. 题目2. 解题1. 题目 段式回文 其实与 一般回文 类似&#xff0c;只不过是最小的单位是 一段字符 而不是 单个字母。 举个例子&#xff0c;对于一般回文 "abcba" 是回文&#xff0c;而 "volvo" 不是&#xff0c;但如果我们把 "volvo"…

利用python批量修改文件名称

一、基础知识&#xff1a; 通过查阅资料os模块中rename和renames都可以做到 他们的区别为.rename:只能修改文件名 renames:可以修改文件名,还可以修改文件上级目录名称 另一个用到的方法是os.listdir(path) path为路径 此方法可以将指定路径文件夹中的文件名录入一个列表…

LeetCode 464. 我能赢吗(状态压缩+记忆化递归 / 博弈)

文章目录1. 题目2. 解题1. 题目 在 “100 game” 这个游戏中&#xff0c;两名玩家轮流选择从 1 到 10 的任意整数&#xff0c;累计整数和&#xff0c;先使得累计整数和达到或超过 100 的玩家&#xff0c;即为胜者。 如果我们将游戏规则改为 “玩家不能重复使用整数” 呢&…

LeetCode 880. 索引处的解码字符串(找规律)

文章目录1. 题目2. 解题1. 题目 给定一个编码字符串 S。请你找出 解码字符串 并将其写入磁带。 解码时&#xff0c;从编码字符串中 每次读取一个字符 &#xff0c;并采取以下步骤&#xff1a; 如果所读的字符是字母&#xff0c;则将该字母写在磁带上。如果所读的字符是数字&a…

LeetCode 1711. 大餐计数(map计数 + 二分查找)

文章目录1. 题目2. 解题1. 题目 大餐 是指 恰好包含两道不同餐品 的一餐&#xff0c;其美味程度之和等于 2 的幂。 你可以搭配 任意 两道餐品做一顿大餐。 给你一个整数数组 deliciousness &#xff0c;其中 deliciousness[i] 是第 i​​​​​​​​​​​​​​ 道餐品的美…

LeetCode 1710. 卡车上的最大单元数(排序,模拟)

文章目录1. 题目2. 解题1. 题目 请你将一些箱子装在 一辆卡车 上。给你一个二维数组 boxTypes &#xff0c;其中 boxTypes[i] [numberOfBoxesi, numberOfUnitsPerBoxi] &#xff1a; numberOfBoxesi 是类型 i 的箱子的数量。numberOfUnitsPerBoxi 是类型 i 每个箱子可以装载…

hdu 1505 City Game

http://acm.hdu.edu.cn/showproblem.php?pid1505 先处理每一行上每一个F为底往上所到达的高度&#xff0c;然后再左右处理。 1 #include <cstdio>2 #include <cstring>3 #include <algorithm>4 #define maxn 10015 using namespace std;6 7 int t;8 int n,m…

LeetCode 1712. 将数组分成三个子数组的方案数(前缀和 + 二分查找)

文章目录1. 题目2. 解题221 / 3117&#xff0c;前7.1%574 / 9692&#xff0c;前 5.9%周赛前2题如下&#xff1a; LeetCode 5641. 卡车上的最大单元数&#xff08;排序&#xff0c;模拟&#xff09; LeetCode 5642. 大餐计数&#xff08;map计数 二分查找&#xff09; 第4题&am…

第六周交流会内容

第六周 交流会 -bO莱特 一、接口作为参数&#xff0c;不同的接口调用不同的方法&#xff0c;例如&#xff1a;输出“I love Game”或输出“我喜欢游戏” 接口的思想&#xff1a;在于可以增加很多类都需要实现的功能。比如&#xff1a;各式各样的商品&#xff0c;可能隶属不同公…

Python基础代码练习(30个示例)

1、冒泡排序 2、计算x的n次方的方法 3、计算a*a b*b c*c …… 4、计算阶乘 n! 5、列出当前目录下的所有文件和目录名 6、把一个list中所有的字符串变成小写&#xff1a; 7、输出某个路径下的所有文件和文件夹的路径 8、输出某个路径及其子目录下的所有文件路径 9、输出某个路…

LeetCode 1713. 得到子序列的最少操作次数(最长上升子序DP nlogn)

文章目录1. 题目2. 解题1. 题目 给你一个数组 target &#xff0c;包含若干 互不相同 的整数&#xff0c;以及另一个整数数组 arr &#xff0c;arr 可能 包含重复元素。 每一次操作中&#xff0c;你可以在 arr 的任意位置插入任一整数。 比方说&#xff0c;如果 arr [1,4,1,…

ubuntu 16.04系统中nvidai、cuda、cudnn安装及注意事项

一、NVIDAI driver显卡驱动安装 首先看一下笔记本显卡型号 lspci |grep VGA 在命令行敲过这个命令后&#xff0c;有些台式机或笔记本会显示nvidia显卡&#xff0c;如下所示&#xff1a; 但是我的笔记本电脑 只显示nouveau卡&#xff08;集成显卡&#xff09; 需要执行下面命…

LeetCode 552. 学生出勤记录 II(动态规划)

文章目录1. 题目2. 解题1. 题目 给定一个正整数 n&#xff0c;返回长度为 n 的所有可被视为可奖励的出勤记录的数量。 答案可能非常大&#xff0c;你只需返回结果mod 10^9 7的值。 学生出勤记录是只包含以下三个字符的字符串&#xff1a; A : Absent&#xff0c;缺勤 L : L…

ubuntu定时执行python脚本方法及实例代码

一、前言 本文将介绍ubuntu系统下如何定时执行shell脚本、python脚本&#xff0c;ubuntu系统有一个定时任务的管理器crontab&#xff0c;我们只需要编辑定时任务&#xff0c;然后重启定时任务服务就好了。 二、工具&#xff1a;crontab a、编辑定时任务&#xff1a; crontab -…

LeetCode 940. 不同的子序列 II(动态规划)

文章目录1. 题目2. 解题1. 题目 给定一个字符串 S&#xff0c;计算 S 的不同非空子序列的个数。 因为结果可能很大&#xff0c;所以返回答案模 10^9 7. 示例 1&#xff1a; 输入&#xff1a;"abc" 输出&#xff1a;7 解释&#xff1a;7 个不同的子序列分别是 &qu…

[Jmeter]Jmeter环境搭建

Jmeter环境搭建 1、 拷贝 \\szpc1450\apache-jmeter-2.7 整个目录到本机(我是放在D盘&#xff0c;以下路径说明以D盘为例) 2、 拷贝\\szpc1450\Tools\autotest softwares\jdk-6u11-windows-i586-p.exe到本机之后进行安装 安装完毕之后添加环境变量 JAVA_HOME C:\Program File…

LeetCode 907. 子数组的最小值之和(单调栈)

文章目录1. 题目2. 解题1. 题目 给定一个整数数组 A&#xff0c;找到 min(B) 的总和&#xff0c;其中 B 的范围为 A 的每个&#xff08;连续&#xff09;子数组。 由于答案可能很大&#xff0c;因此返回答案模 10^9 7。 示例&#xff1a; 输入&#xff1a;[3,1,2,4] 输出&a…