给定一个仅包含 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

解题思路


矩形的面积等于,分别找出即可

  1. 计算
    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. 找到
    对于第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最大矩形相关推荐

  1. 【财经期刊FM-Radio|2021年02月23日】

    title: [财经期刊FM-Radio|2021年02月23日] 微信公众号: 张良信息咨询服务工作室 [今日热点新闻一览↓↓] 纳指跌超2%,科技股领跌,道指收涨,能源领衔走高,金银油铜高涨,伦铜 ...

  2. 橘子CPS联盟操作手册2021.09

    橘子CPS联盟操作手册2021.09 目录 橘子CPS联盟操作手册2021.09 橘子CPS联盟是干嘛的 橘子CPS基本操作流程 PC端操作 1.注册 2.登陆 3.渠道管理 4.分享网站 5.分享网 ...

  3. 2021.09.27 MySQL笔记

    2021.09.27 MySQL笔记 文章目录 2021.09.27 MySQL笔记 一.展示当前存在的所有数据库 二.使用(选中)一个数据库 三.创建一个数据表 四.查询并展示该数据库内的所有数据表 ...

  4. 实习日志 (2021.09.13)

    2021.09.13星期一 今天把之前的算法题终于给弄明白了,并能够按照自己的思路去把他给完成,总结这个题目并不是很难,最重要的是要把链表给弄懂,一开始由于我对链表不是很熟悉,导致我在写该题目的时候花 ...

  5. 2021.09青少年软件编程(Python)等级考试试卷(三级)

    2021.09青少年软件编程(Python)等级考试试卷(三级) 一.单选题(共25题,每题2分,共50分) 1.使用map函数可以实现列表数据元素类型的转换,而无需通过循环.则将列表L=['1',' ...

  6. “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 问题分析 出现日期报错是因为 ...

  7. 2021.06.02会解方程的计算器

    2021.06.02会解方程的计算器 (题目来源:) 题目描述 为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例: 4+3x=8 6a-5+1=2-2a -5+12y=0 ZL先生被主 ...

  8. 2021.09.24—皮皮与帅帅的第二篇情话

    2021.09.24我们小情书的第二天 每天晚上,小兔子都会一个人来到溪水边,坐在地上数着星星.而且他个人也非常喜欢一闪一闪的东西.对于小兔子来说,每颗星星都是特别的,于是她就给每颗星星都起了一个可爱 ...

  9. 《惢客创业日记》2021.09.15(周三)套路的最高境界

    今天,凉粉儿给我发了一段她想的关于惢客的宣传词:"你被套路过吗?想不再被套路吗?上惢客."总结一句话是"不被套路上惢客".我觉得能把惢客跟套路联系在一起,很贴切 ...

  10. 2021.06.02税收和补贴问题

    2021.06.02税收和补贴问题 (题目来源:洛谷-P1023) 题目描述 每样商品的价格越低,其销量就会相应增大.现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位 ...

最新文章

  1. Ubuntu 中的 dpkg 安装deb、删除deb、显示已安装包列表、解压deb文件、显示deb包内文件列表、配置deb软件包
  2. char *a 与 char a[] 的区别
  3. Spring Boot Redis 入门
  4. 【LeetCode】103# 二叉树的锯齿形层次遍历
  5. 为什么选择Nginx
  6. java 小数运算 少0.1_计算器是如何实现0.1的?
  7. ubuntu18.04安装python的mysqlclient==1.4.6报错ERROR Command errored out with exit status 1python setup
  8. 使用nginx实现一个主机部署多域名指向不同docker项目
  9. php smarty框架案例,php封装的smarty类案例
  10. 从零开始学前端:过渡和动画 --- 今天你学习了吗?(CSS:Day20)
  11. 你觉得一个128g主力机用几年会到非换不可的程度?
  12. day02_20190106 基础数据类型 编码 运算符
  13. 法国 计算机金融 大学,法国金融专业大学排名(2020年USNEWS)_快飞留学
  14. 小米 MIUI系统 安装包 刷机
  15. 前端数据处理——行政区域编码
  16. 突然发现CAD都是命令行不显示对话框了!!!
  17. 计算机视觉学习笔记(一)
  18. 【科学的尽头是神学】祖师爷坐镇
  19. 40vf什么意思_LED 的基本术语VF、IV、WL、IR 解释及光通量换算...
  20. 题目:计算 1! + 2! + 3! + 4! +... + 10! 说明:4! 表示4的阶乘。4的阶乘是:1 * 2 * 3 * 4

热门文章

  1. php表单提交 邮箱_PHP的一个基础知识 表单提交
  2. java 中半圆的函数,前端程序员必须掌握之三角函数在前端动画中的应用
  3. mybatis实体类类型别名
  4. Mac下使用Docker快速搭建pinpont追踪系统APM
  5. 译:Self-Modifying cod 和cacheflush
  6. $stateParams 详解
  7. MyBatis学习总结——调用存储过程
  8. Oracle高级查询之GROUP BY
  9. 快餐店选址指南--转
  10. 关于spfile的一个难题