题目描述:

给定一个仅包含 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. 2019-07-29 ThinkPHP简单的增删改查

    在model里面,建立表名Model.class.php的控制器,用以连接数据表,代码如下 namespace Home\Model; use Think\Model; class NewsModel ...

  2. 前端有用的CSS属性和JS方法

    1.CSS属性: 透明属性(值越大越不透明): IE:filter:alpha(opacity:30) Google:opacity:0.3 层次属性(值大的会在上面): z-index:100 2. ...

  3. JS基础 —— call、apply 和 bind

    函数的三个原型方法 作用:改变this指向 call MDN:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Glo ...

  4. JavaSE01:初始Java

    java语言的优势 简单性 面向对象 跨平台性(可移植性) 高性能 分布式 动态性 多线程 安全性 健壮性 java最大的特点是跨平台性 Java的跨平台性来源于Java虚拟机(jvm),Java靠在 ...

  5. 《JavaScript高级程序设计》笔记:高级技巧

    高级函数 安全的类型检测 在任何值上调用Object原生的toString()方法,都会返回一个[object NativeConstructorName]格式的字符串.每个类在内部都有一个[[Cla ...

  6. 英语SouthRedAgate南红玛瑙

    南红玛瑙(SouthRedAgate)是玛瑙的一个种类,古称”赤玉”,质地细腻油润,是中国独有的品种.由于产量稀少,老南红玛瑙价格急剧上升.南红玛瑙曾被古人用之入药,养心养血. 现在的南红玛瑙已经和和 ...

  7. 英语fraunce法兰西

    fraunce  外文词汇,中文翻译为代指法兰西(地名) 中文名:法兰西 外文名:fraunce 目录 释义 Fraunce 读音:英 [frɑ:ns] 美 [fræns] Noun(名词) 1. ...

  8. 《linux就该这么学》课堂笔记07 while、case、计划任务、用户增删改查命令

    while条件循环语句 while 条件测试操作 do 命令序列 done  case条件测试语句 case 变量值 in 模式一) 命令序列1 ;; 模式二) 命令序列2 ;; *) 默认命令序列 ...

  9. Linux centos关机和重启命令

    Linux centos重启命令: 1.reboot   普通重启 2.shutdown -r now 立刻重启(root用户使用) 3.shutdown -r 10 过10分钟自动重启(root用户 ...

  10. Centos 7.3 镜像制作

    1.在KVM环境上准备虚拟机磁盘 [root@localhost ~]# qemu-img create -f qcow2 -o size=50G /opt/CentOS---x86_64_50G.q ...