给你一个只包含 0 和 1 的 rows * columns 矩阵 mat ,请你返回有多少个 子矩形 的元素全部都是 1 。

示例 1:

输入:mat = [[1,0,1],
[1,1,0],
[1,1,0]] 输出:13 解释: 有 6 个 1x1 的矩形。 有 2 个 1x2 的矩形。 有 3 个 2x1 的矩形。 有 1 个 2x2 的矩形。 有 1 个 3x1 的矩形。 矩形数目总共 = 6 + 2 + 3 + 1 + 1 = 13 。

示例 2:

输入:mat = [[0,1,1,0],
[0,1,1,1],
[1,1,1,0]] 输出:24 解释: 有 8 个 1x1 的子矩形。 有 5 个 1x2 的子矩形。 有 2 个 1x3 的子矩形。 有 4 个 2x1 的子矩形。 有 2 个 2x2 的子矩形。 有 2 个 3x1 的子矩形。 有 1 个 3x2
的子矩形。 矩形数目总共 = 8 + 5 + 2 + 4 + 2 + 2 + 1 = 24 。

示例 3:

输入:mat = [[1,1,1,1,1,1]] 输出:21

示例 4:

输入:mat = [[1,0,1],[0,1,0],[1,0,1]]

输出:5

提示:

1 <= rows <= 150
1 <= columns <= 150
0 <= mat[i][j] <= 1

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

思路

用一个矩阵数组left保存当前矩阵的左侧最长为1的个数,例如下标为i,j时,计算j左侧连续为1的个数。计算矩阵个数时,遍历整个矩阵,计算下标为i,j时,遍历left[(i-1)][j] ~left[0][j],统计当前最小值,即为一个全1的矩阵,加到总计的矩阵数。

class Solution {public:int numSubmat(vector<vector<int>>& mat) {int n = mat.size();int m = mat[0].size();vector<vector<int>> left(n,vector<int>(m,0));for(int i = 0;i < n;i++){int num = 0;for(int j = 0;j < m;j++){if(mat[i][j] == 1) num++;else num = 0;left[i][j] = num;}}int ans = 0;for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){int mins = 9999;for(int k = i; k >= 0; k--){mins = min(left[k][j],mins);ans += mins;}}}return ans;}
};

力扣比赛 5454. 统计全 1 子矩形相关推荐

  1. 5454. 统计全 1 子矩形(Leetcode 196周赛)

    5454. 统计全 1 子矩形 给你一个只包含 0 和 1 的 rows * columns 矩阵 mat ,请你返回有多少个 子矩形 的元素全部都是 1 . 示例 1: 输入:mat = [[1,0 ...

  2. 【LeetCode】5454. 统计全 1 子矩形

    给你一个只包含 0 和 1 的 rows * columns 矩阵 mat ,请你返回有多少个 子矩形 的元素全部都是 1 . 示例 1: 输入:mat = [[1,0,1], [1,1,0], [1 ...

  3. jq遍历子元素_leetcode第196周赛第三题统计全 1 子矩形

    leetcode1504. 统计全 1 子矩形 给你一个只包含 0 和 1 的 rows * columns 矩阵 mat ,请你返回有多少个 子矩形 的元素全部都是 1 . 示例 1: 输入:mat ...

  4. LeetCode 1504. 统计全 1 子矩形(记录左侧的连续1的个数)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个只包含 0 和 1 的 rows * columns 矩阵 mat , 请你返回有多少个 子矩形 的元素全部都是 1 . 示例 1: 输入:mat ...

  5. leetcode1504. 统计全 1 子矩形(动态规划)

    给你一个只包含 0 和 1 的 rows * columns 矩阵 mat ,请你返回有多少个 子矩形 的元素全部都是 1 . 示例 1: 输入:mat = [[1,0,1], [1,1,0], [1 ...

  6. leetcode 1504. Count Submatrices With All Ones | 1504. 统计全 1 子矩形(单调栈)

    题目 https://leetcode.com/problems/count-submatrices-with-all-ones/ 题解 本题与 leetcode 84. Largest Rectan ...

  7. 力扣 560. 和为 K 的子数组

    题目 给你一个整数数组 nums 和一个整数 k ,请你统计并返回该数组中和为 k 的连续子数组的个数. 示例 输入:nums = [1,1,1], k = 2 输出:2 输入:nums = [1,2 ...

  8. 力扣 713. 乘积小于K的子数组

    题目 给定一个正整数数组 nums和整数 k . 请找出该数组内乘积小于 k 的连续的子数组的个数. 示例 输入: nums = [10,5,2,6], k = 100 输出: 8 解释: 8个乘积小 ...

  9. C++算法学习(力扣:1254. 统计封闭岛屿的数目)

    有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 ). 我们从一块陆地出发,每次可以往上下左右 4 个方向相邻区域走,能走到的所有陆地区域,我们将其称为一座「岛屿」 ...

最新文章

  1. 独家 | AutoFlip:智能化视频剪裁的开源框架(附链接)
  2. python判断操作系统类型
  3. linux终端帮助,Linux下的帮助命令
  4. html走马观花效果,走马观花台湾行 用EF-S 10-18来记录风景
  5. java枚举类中字段有没有必要加final____枚举类字段 Field ‘xxx‘ may be ‘final‘
  6. java query object_Object Query Language (OQL) query 基本使用
  7. Javascript浅谈之this
  8. android无网络状态栏,Android中检查网络连接状态的变化,无网络时跳转到设置界面...
  9. eclipse下properties配置文件中文乱码解决
  10. 计算机代数与数论pdf,基础数论算法 - maTHμ - 计算机代数系统.pdf
  11. js读取txt文件中的内容
  12. 股票语音播报软件 炒股语音实时播报
  13. 虚拟偶像春天来临,谁能从中脱颖而出?
  14. antdv 表格标题换行
  15. 硬件设计之一——电源设计01:电源防护
  16. Java语言每日一练—第9天:根据输入的数据判断是星期几
  17. (转) 机器学习很有趣Part6:怎样使用深度学习进行语音识别
  18. ArcGIS在城市规划中的应用
  19. vue.js前端开发技术读书笔记二:vue数据绑定
  20. BootStrap框架-旅游网页设计

热门文章

  1. C# Serializable
  2. AGM AG16K FPGA介绍
  3. 大数据之Linux篇(一)
  4. REST 接口 原文翻译
  5. 计算机小键盘上灯亮怎么去掉,怎么设置电脑开机自动启动小键盘灯NumberLock?
  6. STM32驱动新西达电调和无刷电机
  7. 提高SDN控制器拓扑发现性能
  8. android 9.0的模拟器,exagear模拟器最新版安卓9.0
  9. cmd窗口最小化运行
  10. 随机点名册的简单程序