题目链接

【题解】

把所有的"1"矩形分成m类。
第j类的矩形。他的右边界跟第j列紧靠。
那么。
我们设f[i][j]表示(i,j)这个点往左最长能延伸多少个数目的"1"
那么对于第j类的矩形。
我们会发现。问题转化为求一个侧着放的柱状图。
然后让你在其中找到最大面积的矩形。且要求紧贴着底面(也即第j列)
那么问题就抓换成[这道题](https://www.cnblogs.com/AWCXV/p/11934410.html)了。
做一个O(N)的单调队列就能解决。
所以总的复杂度就是O(N^2)的。

【代码】

class Solution {
public:
int maximalRectangle(vector<vector<char>>& matrix) {
if (matrix.empty()) return 0;
if (matrix[0].empty()) return 0;
int n = matrix.size();
int m = matrix[0].size();
int f[1005][1005];
memset(f,0,sizeof(f));
for (int i = 0;i < n;i++)
for (int j = 0;j < m;j++){
if (matrix[i][j]=='1'){
f[i+1][j+1] = f[i+1][j]+1;
}
}
int h[1005],sta[1005];
memset(h,0,sizeof(h));memset(sta,0,sizeof(sta));
int top;
int ma = 0;
for (int j = 1;j <= m;j++){
for (int i = 1;i <= n;i++){
h[i] = f[i][j];
}
top = 1;
sta[1] = 0;
for (int i = 1;i <= n;i++){
while (top!=1 && h[sta[top]]>h[i]){
ma = max(ma,h[sta[top]]*(i-1-sta[top-1]));
top--;
}
sta[++top] = i;
}
while (top>1){
ma = max(ma,h[sta[top]]*(n-sta[top-1]));
top--;
}
}
return ma;
}
};

【LeetCode 85】最大矩形的更多相关文章

  1. Java实现 LeetCode 85 最大矩形

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

  2. leetcode 85. 最大矩形

    题目描述: 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积. 思路分析: 这题是之前那道最大正方形的进阶,同样是利用dp来求解.通过逐行去计算最大矩形,即优化的 ...

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

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

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

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

  5. [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 ...

  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. 关于Vue+iview的前端简单的导入数据(excel)

    前一段时间项目经历了纯前端处理导入excel文件并处理等问题,数据量大的时候时间上长的一比,三千条数据需要三四秒甚至更长,不管产品咋想的,具体做法为: 首先下载一个这玩意: 进行简单封装一下: < ...

  2. tomcat启动控制台报Exception in thread ''main".......“Could not find the main class:.....Bootstrap”问题

    startup.bat文件打开最后end下一行加pause调试,重新启动tomcat,发现配置没问题,但是依然报错,发现是jdk版本问题,jdk1.6无法与tomcat8适配,重新装个1.7版本的jd ...

  3. EasyUI的datagrid列属性添加超链接

    $("#dg").datagrid({        url: "../Ajax/PurchaseAjax.ashx",        queryParams: ...

  4. Oracle PL/SQL基础

    1.下载sql developer数据库连接可视化工具 连接地址:点我下载 下载完成,安装有Java环境,解压即可运行,也可以在linux系统中运行.

  5. python依赖包整体迁移方法(pip)

    做个记录 python依赖包整体迁移方法

  6. 2014 SummerTrain Beautiful Garden

    There are n trees planted in lxhgww's garden. You can assume that these trees are planted along the ...

  7. sublime text3 安装插件

    遇到的问题1: 软件中无此属性 打开Packages目录,Preferences > Browse Packages 就可以进入这个目录.$ cd Packages/$ git clone ht ...

  8. eclipse安装weblogic Server服务器

    1.首先打开eclipse,第一次进入欢迎画面点击上方标签X,关闭欢迎标签 2.关闭欢迎标签后,进入eclipse操作界面,在上方的菜单栏,选择windows下拉菜单,选择子菜单Preference ...

  9. 利用delegate来解决类之间相互引用问题(引用死锁)

    类之间相互引用--类A中需要调用类B中的方法,同时,类B中又要调用类A中的方法.(也被称为引用死锁,通常会出现编译错误). 解决方法是,在类A中引用类B,并使类A成为类B的delegate,这样在类A ...

  10. elasticsearch索引清理脚本shell

    es-index-clear.sh: #!/bin/bash#----------------------------------------------# Module: es-index-clea ...