2021-09-02最大矩形
给定一个仅包含 0
和 1
、大小为 rows x cols
的二维二进制矩阵,找出只包含 1
的最大矩形,并返回其面积。
给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
示例
输入:
[["1","0","1","0","0"],
["1","0","1","1","1"],
["1","1","1","1","1"],
["1","0","0","1","0"]]
输出: 6
解题思路
矩形的面积等于,分别找出和即可
- 计算
row[i]是matrix的第i行,每行有n列,例如示例中,n=5
到达第行时
当row[i][j] == '0' 时(其中),
当row[i][j] == '1' 时(其中),
例如,i = 2时,h = [3, 1, 3, 2, 2],每一行都要求出h,一共求4组 - 找到
对于第2行的h,[3, 1, 3, 2, 2],前三行所构成的矩形的面积可以是1,2,3,4,6,这是因为去了不同的所造成的
当是,面积等于6
[["x","x","x","x","x"],
["x","x","1","1","1"],
["x","x","1","1","1"],
["x","x","x","x","x"]
当是,面积等于5
[["x","x","x","x","x"],
["x","x","x","x","x"],
["1","1","1","1","1"],
["x","x","x","x","x"]
找出所有的和的组合,像极了84题:柱状图中最大的矩形
class Solution:def maximalRectangle(self, matrix: List[List[str]]) -> int:if not matrix or not matrix[0]:return 0n = len(matrix[0])height = [0] * (n+1)max_area = 0for row in matrix:# 计算hfor i in range(n):height[i] = height[i]+1 if row[i]=='1' else 0# 找出所有h和w的组合 stack = [-1]for j in range(n + 1):while height[j] < height[stack[-1]]:h = height[stack.pop()]w = j - 1 - stack[-1]max_area = max(max_area, h * w) stack.append(j) return max_area
class Solution:def maximalRectangel(self, matrix: List[List[str]]) -> int:if not matrix or not matrix[0]:return 0n = len(matrix[0])height ==[0] *(n+1)max_area =0for row in matrix:for i in range(n):height[i] = height[i]+1 i
方法二:单调栈
思路与算法
在方法一中,我们讨论了将输入拆分成一系列的柱状图。为了计算矩形的最大面积,我们只需要计算每个柱状图中的最大面积,并找到全局最大值。
我们可以使用「84. 柱状图中最大的矩形的官方题解」中的单调栈的做法,将其应用在我们生成的柱状图中。
class Solution {
public:int maximalRectangle(vector<vector<char>>& matrix) {int m = matrix.size();if (m == 0) {return 0;}int n = matrix[0].size();vector<vector<int>> left(m, vector<int>(n, 0));for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (matrix[i][j] == '1') {left[i][j] = (j == 0 ? 0: left[i][j - 1]) + 1;}}}int ret = 0;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (matrix[i][j] == '0') {continue;}int width = left[i][j];int area = width;for (int k = i - 1; k >= 0; k--) {width = min(width, left[k][j]);area = max(area, (i - k + 1) * width);}ret = max(ret, area);}}return ret;}
};
2021-09-02最大矩形相关推荐
- 【财经期刊FM-Radio|2021年02月23日】
title: [财经期刊FM-Radio|2021年02月23日] 微信公众号: 张良信息咨询服务工作室 [今日热点新闻一览↓↓] 纳指跌超2%,科技股领跌,道指收涨,能源领衔走高,金银油铜高涨,伦铜 ...
- 橘子CPS联盟操作手册2021.09
橘子CPS联盟操作手册2021.09 目录 橘子CPS联盟操作手册2021.09 橘子CPS联盟是干嘛的 橘子CPS基本操作流程 PC端操作 1.注册 2.登陆 3.渠道管理 4.分享网站 5.分享网 ...
- 2021.09.27 MySQL笔记
2021.09.27 MySQL笔记 文章目录 2021.09.27 MySQL笔记 一.展示当前存在的所有数据库 二.使用(选中)一个数据库 三.创建一个数据表 四.查询并展示该数据库内的所有数据表 ...
- 实习日志 (2021.09.13)
2021.09.13星期一 今天把之前的算法题终于给弄明白了,并能够按照自己的思路去把他给完成,总结这个题目并不是很难,最重要的是要把链表给弄懂,一开始由于我对链表不是很熟悉,导致我在写该题目的时候花 ...
- 2021.09青少年软件编程(Python)等级考试试卷(三级)
2021.09青少年软件编程(Python)等级考试试卷(三级) 一.单选题(共25题,每题2分,共50分) 1.使用map函数可以实现列表数据元素类型的转换,而无需通过循环.则将列表L=['1',' ...
- “30/Jan/22 09:02 AM”不是有效日期。请按下列格式输入日期:dd/MMM/yy h:mm a
问题描述 在jira使用中设置日期报错: "30/Jan/22 09:02 AM"不是有效日期.请按下列格式输入日期:dd/MMM/yy h:mm a 问题分析 出现日期报错是因为 ...
- 2021.06.02会解方程的计算器
2021.06.02会解方程的计算器 (题目来源:) 题目描述 为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例: 4+3x=8 6a-5+1=2-2a -5+12y=0 ZL先生被主 ...
- 2021.09.24—皮皮与帅帅的第二篇情话
2021.09.24我们小情书的第二天 每天晚上,小兔子都会一个人来到溪水边,坐在地上数着星星.而且他个人也非常喜欢一闪一闪的东西.对于小兔子来说,每颗星星都是特别的,于是她就给每颗星星都起了一个可爱 ...
- 《惢客创业日记》2021.09.15(周三)套路的最高境界
今天,凉粉儿给我发了一段她想的关于惢客的宣传词:"你被套路过吗?想不再被套路吗?上惢客."总结一句话是"不被套路上惢客".我觉得能把惢客跟套路联系在一起,很贴切 ...
- 2021.06.02税收和补贴问题
2021.06.02税收和补贴问题 (题目来源:洛谷-P1023) 题目描述 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位 ...
最新文章
- Ubuntu 中的 dpkg 安装deb、删除deb、显示已安装包列表、解压deb文件、显示deb包内文件列表、配置deb软件包
- char *a 与 char a[] 的区别
- Spring Boot Redis 入门
- 【LeetCode】103# 二叉树的锯齿形层次遍历
- 为什么选择Nginx
- java 小数运算 少0.1_计算器是如何实现0.1的?
- ubuntu18.04安装python的mysqlclient==1.4.6报错ERROR Command errored out with exit status 1python setup
- 使用nginx实现一个主机部署多域名指向不同docker项目
- php smarty框架案例,php封装的smarty类案例
- 从零开始学前端:过渡和动画 --- 今天你学习了吗?(CSS:Day20)
- 你觉得一个128g主力机用几年会到非换不可的程度?
- day02_20190106 基础数据类型 编码 运算符
- 法国 计算机金融 大学,法国金融专业大学排名(2020年USNEWS)_快飞留学
- 小米 MIUI系统 安装包 刷机
- 前端数据处理——行政区域编码
- 突然发现CAD都是命令行不显示对话框了!!!
- 计算机视觉学习笔记(一)
- 【科学的尽头是神学】祖师爷坐镇
- 40vf什么意思_LED 的基本术语VF、IV、WL、IR 解释及光通量换算...
- 题目:计算 1! + 2! + 3! + 4! +... + 10! 说明:4! 表示4的阶乘。4的阶乘是:1 * 2 * 3 * 4