题目描述:

给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

思路分析:

这题是之前那道最大正方形的进阶,同样是利用dp来求解。通过逐行去计算最大矩形,即优化的子结构是当前行的最大矩形,从1行到2行,最后到n行。需要利用三个数组来求矩形面积,首先是h,表示当前位置矩形的最大高度,l和r分别表示了当前位置可向左右延伸到多远。其中l数组存左边界,r数组存右边界,是一个左闭右开区间。当遇到‘1’时,需要更新左右边界,左边界的更新是l[i] = max(l[i], cur_left),这里的l[i]即上一行时在当前位置的左边界,cur_left则表示在当前行的左边界,以此来保证其延伸的区域不会低于当前位置的高度。右边界的更新为r[i] = min(r[i], cur_right),右边界需要从右往左。

代码:

 class Solution {
public:
int maximalRectangle(vector<vector<char>>& matrix) {
int row = matrix.size();
if(row == )
return ;
int col = matrix[].size();
vector<int>l(col, );
vector<int>r(col, col);
vector<int>h(col, );
int max_area = ;
for(int i=; i<row; i++)
{
int cur_left=, cur_right=col;
for(int j=; j<col; j++)
{
if(matrix[i][j]=='')
{
h[j] = h[j]+;
}
else
h[j] = ;
}
for(int j=; j<col; j++)
{
if(matrix[i][j]=='')
{
l[j] = max(l[j], cur_left);
}
else
{
cur_left = j+;
l[j]=;
}
}
for(int j=col-; j>=; j--)
{
if(matrix[i][j]=='')
{
r[j] = min(r[j], cur_right);
}
else
{
cur_right = j;
r[j] = col;
}
}
for(int j=; j<col; j++)
{
max_area = max(max_area, (r[j]-l[j])*h[j]);
}
}
return max_area;
}
};

leetcode 85. 最大矩形的更多相关文章

  1. Java实现 LeetCode 85 最大矩形

    85. 最大矩形 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积. 示例: 输入: [ ["1","0","1 ...

  2. LeetCode 85 | 如何从矩阵当中找到数字围成的最大矩形的面积?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题53篇文章,我们一起来看看LeetCode中的85题,Maximal Rectangle(最大面积矩形). 今天的 ...

  3. 求解最大矩形面积 — leetcode 85. Maximal Rectangle

    之前切了道求解最大正方形的题,题解猛戳 这里.这道题 Maximal Rectangle 题意与之类似,但是解法完全不一样. 先来看这道题 Largest Rectangle in Histogram ...

  4. [LeetCode] 85. Maximal Rectangle 最大矩形

    Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and ...

  5. 【LeetCode 85】最大矩形

    题目链接 [题解] 把所有的"1"矩形分成m类. 第j类的矩形.他的右边界跟第j列紧靠. 那么. 我们设f[i][j]表示(i,j)这个点往左最长能延伸多少个数目的"1& ...

  6. LeetCode (85): Maximal Rectangle [含84题分析]

    链接: https://leetcode.com/problems/maximal-rectangle/ [描述] Given a 2D binary matrix filled with '0's ...

  7. [LeetCode] Rectangle Area 矩形面积

    Find the total area covered by two rectilinear rectangles in a2D plane. Each rectangle is defined by ...

  8. [LeetCode] Rectangle Overlap 矩形重叠

    A rectangle is represented as a list [x1, y1, x2, y2], where (x1, y1) are the coordinates of its bot ...

  9. Leetcode 492. 构造矩形

    1.题目描述 作为一位web开发者, 懂得怎样去规划一个页面的尺寸是很重要的. 现给定一个具体的矩形页面面积,你的任务是设计一个长度为 L 和宽度为 W 且满足以下要求的矩形的页面.要求: 1. 你设 ...

随机推荐

  1. python基础--数据结构之字典

    字典 特点:无序,键唯一 目录 1.字典的创建 2. .setdefault 的使用 3.  字典中的查找 4.字典中的改 5. 字典中的删除 6. 打印字典的方法 7. 格式化字符串 8. 合并字符 ...

  2. Kafka消费者组静态成员(static consumer member)

    Kafka 2.3发布后官网的Consumer参数中增加了一个新的参数:group.instance.id.下面是这个参数的解释: A unique identifier of the consume ...

  3. vue element-ui tree 根节点固定子节点懒加载 首次加载根节点并展开

    关键代码: <el-tree ref="foldTree" node-key="id" :highlight-current="true&quo ...

  4. Docker08-网络管理

    目录 桥接网络 Bridge Network 相关操作命令 实例演示:容器之间通过自定义bridge通讯 宿主网络 Host Network Overlay Network 相关操作命令 实例演示:容 ...

  5. Django 之 ContentType组件

    一.什么是 ContentTypes ContentTypes 是 Django 内置的一个应用,它可以追踪记录项目中所有 app 和 model 的对应关系,并记录在 django_content_ ...

  6. 使用awk格式化输出文本

    注意:本文并不是一篇awk入门文章,而是偏重实例讲解 awk借鉴了c语法,因此awk在许多地方还保留有c语言的痕迹,比如printf语句:for,if的语法结构等 介绍 最简单地说,AWK 是一种用于 ...

  7. 自动化渗透测试工具(Cobalt Strike)3.1 最新破解版

    自动化渗透测试工具(Cobalt Strike)3.1 最新破解版[附使用教程] Cobalt Strike是一款专业的自动化渗透测试工具,它是图形化.可视化的,图形界面非常友好,一键傻瓜化使用MSF ...

  8. idea 端口被占用

    打开你的DOS命令首先输入 netstat  -ano|findstr  8088   (8088即为被占用的端口号) 再输入taskkill  /pid  7348  /f     (7348即为上 ...

  9. php中的闭包类

    看注释 <?php //闭包类实现匿名函数 //call方法调用 class Customer { private $firstname; private $lastname; public f ...

  10. MySQL定义char和varchar类型,utf8编码,则最大值为多少?

    有道面试题:若一张表中只有一个字段VARCHAR(N)类型,utf8编码,则N最大值为多少?先明白计算的一些规则限制 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只 ...