给出矩阵 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 子矩阵。
示例 3:

输入:matrix = [[904]], target = 0
输出:0

解题思路

遍历所有可以可选的上下边界[i,j]。

  1. 在上下界已经确定的情况下,维护前缀和数组cnt[i],代表第i列所有元素的累加和。
  2. 从第一列开始不断累加,累加到cur当中,cur代表上下界确定的情况下,累加起来的前n列
  3. 使用map记录下前n列累加和为k1的情况,当遍历到前n2列时,累加和为k2时,若满足k2-k1=target,即说明子矩阵[n,n2]的和为target。

代码

func numSubmatrixSumTarget(matrix [][]int, target int) (res int) {for i := 0; i < len(matrix); i++ {col := make([]int, len(matrix[0]))for j := i; j < len(matrix); j++ {for z := 0; z < len(matrix[0]); z++ {col[z] += matrix[j][z]}func() {m := make(map[int]int)m[0] = 1cur := 0for i := 0; i < len(matrix[0]); i++ {cur += col[i]i2, has := m[cur-target]if has {res += i2}m[cur]++}}()}}return}

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

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

    文章目录 1. 题目 2. 解题 1. 题目 给出矩阵 matrix 和目标值 target,返回元素总和等于目标值的非空子矩阵的数量. 子矩阵 x1, y1, x2, y2 是满足 x1 <= ...

  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. 数组中的元素转成Number或者String---数组map方法

    数组中的元素转成Number类型 let num: any = ["1", "2", "3"]; num = num.map(Number) ...

  7. LeetCode 2148. 元素计数

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

  8. LeetCode 1887. 使数组元素相等的减少操作次数(map)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数数组 nums ,你的目标是令 nums 中的所有元素相等.完成一次减少操作需要遵照下面的几个步骤: 找出 nums 中的 最大 值.记这个值 ...

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

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

最新文章

  1. 细说 Lambda 表达式
  2. C/C++杂记:虚函数的实现的基本原理 虚函数表
  3. python如何提高工作效率_用Python的这3个优点,让工作效率提升一倍
  4. linux查看命令的帮助文档,Linux查看命令和帮助文件位置
  5. 通过PEB遍历进程模块(x64/wow4)
  6. [译]Vulkan教程(08)逻辑设备和队列
  7. 简单的实现HTTP密码验证登陆
  8. 14.19 InnoDB and MySQL Replication InnoDB 和MySQL 复制:
  9. spwm波正弦表生成程序,亲测实用有效!!!!!!速度摘取
  10. MATLAB App Designer 制作一个简易计算器的课堂作业
  11. Flink web ui面板功能简述
  12. 方法教程:如何下载网易云音乐上的视频到本地电脑
  13. “沉浸式大型线下游戏”?看看这次腾讯TGC上如何玩很大!
  14. 列表到字典的函数,针对好玩游戏物品清单
  15. linux收发包内核进程名称,Linux内核IP Queue机制的分析(一)——用户态接收数据包...
  16. 最新版YOLOv5 6.1使用教程
  17. docker容器启动成功外界却无法访问
  18. win11音频无声音排查解决方案
  19. Nmon服务器资源监控工具
  20. 前端开发面试题之http和https详解

热门文章

  1. 成为C++高手之实战项目
  2. 【操作系统】进程调度(2a):SJF(短任务优先) 算法 原理与实践
  3. Java通用流行框架大全,绝对干货
  4. 大厂面试必问!50w字+的Java技术类校招面试题汇总
  5. 大厂必备!阿里、字节跳动、京东、腾讯、小米等名企高频面试
  6. JavaScript知识笔记(一)——入门、语句、注释、变量、函数、输出内容、对话框、窗口
  7. windows 2008 r2 系统默认80端口被系统占用的处理
  8. jQuery实现鼠标划过展示大图的方法
  9. 288. Unique Word Abbreviation
  10. 关于个人防火墙的真相