LeetCode-Maximal Rectangle-最大矩形

https://oj.leetcode.com/problems/maximal-rectangle/

一堆0,1矩阵中计算出由1组成的长方形的最大面积。

使用了直方图求最大面积的算法。枚举每一行p,然后在将一行上的所有列看做朝i>p方向出发的直方图,然后在这个直方图上用栈存储递增序列的那个一次遍历算法。最终求得最大值。

class Solution {
public:int n,m;vector<vector<char> > a;vector <int> h;int MaxArea(int p){for (int i=0;i<m;i++){h[i]=0;for (int j=p;j<n;j++){if (a[j][i]=='0') break;h[i]++;}}vector <int> l(m);vector <int> r(m);stack <int> st;for (int i=0;i<m;i++){if (st.empty()){l[i]=i;st.push(i);continue;}if (h[i]>h[st.top()]){l[i]=i;st.push(i);continue;}while(!st.empty()){if (h[i]>h[st.top()]) break;l[i]=l[st.top()];st.pop();}st.push(i);}while(!st.empty()) st.pop();for (int i=m-1;i>=0;i--){if (st.empty()){r[i]=i;st.push(i);continue;}if (h[i]>h[st.top()]){r[i]=i;st.push(i);continue;}while(!st.empty()){if (h[i]>h[st.top()]) break;r[i]=r[st.top()];st.pop();}st.push(i);}int res=0;for (int i=0;i<m;i++){res=max(res,(r[i]-l[i]+1)*h[i]);}return res;}int maximalRectangle(vector<vector<char> > &matrix) {n=matrix.size();a=matrix;if (n==0){return 0;}m=matrix[0].size();int res=0;h.resize(m);for (int i=0;i<n;i++){res=max(res,MaxArea(i));}return res;}
};

  

转载于:https://www.cnblogs.com/yangsc/p/4011917.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cefsharp 加载网页慢_网站访问慢的排查方案(史上最详细)

说实话&#xff0c;比起网站打不开&#xff0c;网站访问慢更让人抓狂。因为造成网站访问慢的因素太多了&#xff0c;一般用户根本无从下手&#xff01;任他千头万绪的问题&#xff0c;从以下三个方面入手&#xff0c;也能轻松破解访问慢的大难题 &#xff1a;响应时间、执行时间…

java中日历类:Calendar

Calendar日历类 该类为抽象类&#xff0c;将所有可能用到的时间信息封装为静态成员变量&#xff0c;方便获取时间属性&#xff0c;其位于java.util.Calendar&#xff0c; 其中的getInstance方法可以返回一个Calendar类的子类对象&#xff0c;可以直接使用次子类进行创建对象&am…

typescript语法高亮插件_vscode常用插件

插件介绍HTML Snippets > 初级H5代码片段及提示HTML CSS Support > 初级H5代码片段及提示Debugger for Chrome > 让 vscode 映射 chrome 的 debug功能&#xff0c;静态页面都可以用 vscode 来打断点调试jQuery Code Snippets > jquery 重度患者必须品&#xff0c;废…

cfree运行程序错误_C/C++程序调试和内存检测

程序出现错误很正常&#xff0c;一个优秀的程序员必须学会调试&#xff0c;发现错误并改正。减少程序错误最有效的方法是&#xff1a;在敲代码之前&#xff0c;多花点时间思考&#xff0c;如何构造程序&#xff0c;数据结构和算法&#xff0c;尽量把细节提前写下来&#xff0c;…

java中System类、String Builder类简介

System类&#xff1a; System类为系统类&#xff0c;此包位于java.lang.System下&#xff0c;可以获得与系统相关的信息或系统操作&#xff0c;如&#xff1a; public class SystemClass{public static void main(String[] args){// 1.System下有许多静态的方法&#xff0c;其…

session的removeattribute移除一个不存在的属性会怎么用_公认峡谷机制最完美,对线几乎无解,夏侯惇高端局为何火不起来?...

Hello各位亲爱的小伙伴们&#xff0c;大家好&#xff0c;我是沐辰。在王者荣耀中始终有这么一个说法&#xff1a;“夏侯惇是王者峡谷机制最完美的英雄”&#xff0c;当然这个可不是沐辰胡编乱造&#xff0c;而是策划在数年前就曾公开发表过的看法。从机制上来&#xff0c;夏侯惇…

python图标的演变_python day 22 CSS拾遗之箭头,目录,图标

lanxing4. CSS拾遗之箭头画法.up { border-top: 30px solid green; border-right: 30px solid transparent; border-bottom: 30px solid transparent; border-left: 30px solid transparent; display: inline-block; } .down { border-top: 30px solid transparent; border-rig…

PHP中生成UUID

一、什么是UUID 简单的说UUID就是一串全球唯一的(16进制)数字串。 UUID的全拼为“Universally Unique Identifier”&#xff0c;可以译为“通用唯一识别码”。UUID由开源软件基金会 (Open Software Foundation, OSF) 定义&#xff0c;是分布式计算环境 (Distributed Computing …

java中包装类介绍

包装类&#xff1a; 基本数据类型使用起来非常方便&#xff0c;但是没有对应的方法来操作这些基本类型的数据&#xff0c;我们只有通过一个类把基本类型的数据封装起来&#xff0c;并在类中定义一些方法&#xff0c;这个类就叫做包装类。 包装类对应基本数据类型中的四类八种…

岗位po是什么意思_面试时,面试官问你有什么优点和缺点?应该如何巧妙的回答?...

工作多年&#xff0c;被面试过很多次&#xff0c;也面试过很多人&#xff0c;其中有一次印象最深刻&#xff0c;这次我不是主面试官&#xff0c;经理要面试一个候选人&#xff0c;他就拉上了我&#xff0c;作为陪衬&#xff0c;用经理的话说就是撑撑场面&#xff0c; 所以问题的…

python新手入门课_Python基础视频12集入门课程

视频笔记:├─1简介与实验环境配置9│ Python基础.pptx│ Python简介.pptx│ 实验环境配置2-1.pdf│ 2.1简介与实验环境配置.mp4│ 请简述 Python 语言与 C 语言、 Java 语言的区别.txt│ 请简述使用 conda 管理 python 环境有哪些优势.txt│├─2编程模式与注释│ 你所认为的 …

java中Collection集合、Iterator迭代器接口、for each循环遍历集合或对象

Collection集合&#xff1a; 概念&#xff1a;集合是java中提供一种存储多个数据的容器;数组也是存储数据的容器&#xff0c;集合和数组的区别就是集合的长度可以改变&#xff0c;而数组的长度不可以改变&#xff1b;集合可以存储多种类型的对象数据&#xff0c;而数组只能存储…

工业镜头选型计算公式_变压器分接开关选型指南

如何选择变压器适用的分接开关型号&#xff1f;选型中又有哪些值得注意的事项呢&#xff1f;小编特别整理提炼了分接开关选型指南&#xff0c;让我们一起来看一下。分接开关的产品型号示例如下&#xff1a;型号中的各项参数和规格可通过以下步骤计算确定&#xff1a;1、确定调压…

icmp端口_pingtunnel搭建icmp隧道

说明pingtunnel可以将udp、tcp、sock5流量伪装成icmp传输&#xff0c;地址&#xff1a;https://github.com/esrrhs/pingtunnel/&#xff0c;详细说明和用法可参考官方说明。示例图客户端运行在攻击机&#xff0c;服务端运行在受害机。情况如下&#xff1a;通过pingtunnel搭建一…

node中使用短信验证功能(阿里云为例)

一、选择短信平台 短信平台有很多&#xff0c;这里我选择阿里云&#xff0c;详细步骤如下&#xff1a; 进入短信控制台&#xff0c;对要发送的短信格式进行配置&#xff0c;如果没有签名&#xff0c;需要申请签名后操作&#xff08;注意&#xff1a;需要自己已有阿里云账号且实…

mysql 5.5数据库主从配置步骤详解

上次给大家介绍了mysql 5.1主从搭建配置教程,这次我们来实现mysql 5.5的主从复制,其实大体上配置是差不多的,只有点细微的差别. 系统:centos 5.x 需要的软件包:mysql-5.5.33.tar.gz 环境准备: 服务器a:192.168.10.151 (主) 服务器b:192.168.10.152 (从)1.安装前准备wget http:/…

如何画圆柱_什么是最速降线?如何来验证一下呢?这里用SolidWorks来试一试

一个仅受重力的物体&#xff0c;从一个点出发&#xff0c;沿着一条没有摩擦的斜坡滚动到另外一个点。肯定有一个斜坡使物体运动的时间最短。这个斜坡所在的曲线就是“最速降线”。关于这个最速降线是怎么计算出来&#xff0c;我并不知道&#xff0c;但是他有一个结论&#xff0…

python读取配置文件使用_python 使用 ConfigParser 读取和修改INI配置文件

在程序开发中&#xff0c;使用独立的配置文件来配置一些参数常见且方便&#xff0c;配置文件的解析或修改并不复杂&#xff0c;在python里更是如此&#xff0c;在官方发布的库中就包含有做这件事情的库&#xff0c;那就是ConfigParser&#xff0c;ConfigParser模块解析的配置文…

根据用户id查询菜单列表(菜单权限问题)

根据用户id查询菜单列表&#xff08;菜单权限问题&#xff09;&#xff1a; 最高级用户菜单效果图&#xff1a; 较低级别用户菜单效果图&#xff1a; SQL语句分析图&#xff1a; 根据用户id查询对应菜单&#xff08;权限&#xff09;SQL语句&#xff1a; SELECT * FROM us…

C# 设计模式 - 单例模式 演示

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace DBImportTool.Sgile{//第一种单例模式Demopublic class A{private volatile static A _instance null;private static readonly object lockHelp…