语音计算矩形面积_LeetCode85-最大矩形

今天在制作书签的时候
突然想到了一个问题
如果要送给未来的女朋友一个书签
上面该写些什么话
哈哈哈哈哈哈哈哈哈
The Spring is coming!
想了一会儿,觉得这句话最合适
To xxx:天使的笑,灿烂的心!!!
哎,还是先找个女朋友再说吧!
85-最大矩形
给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
示例:
输入:
[["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]
]
输出: 6
思路:
这一题刚开始我一直以为得通过动态规划方法才能解决,想了许久还是没能解决便就此作罢,然后看了网上大佬的讲解,才发现还有另外一种很巧妙的方法可以解决。说实话,让我挠破脑皮也想不出来!关键就是:首先根据给定的matrix矩阵来更新每个元素的值,规则是:以该节点为起始点按列搜索,计算值连续为1的数目。这一步预处理也是最最最核心的一步,如下图所示:

第一步预处理完成了,接下来的工作就很简单了。只需要依次遍历新矩阵中每一行的元素,按照上述规则计算最大矩形面积。其实细心的读者此时就会发现求每一行元素所能构成的矩形的最大面积,这不就跟第84题柱状图中最大的矩形一样么?对此题不熟悉的读者可以参考我的上篇文章:
程小新同学:LeetCode84-柱状图中最大的矩形zhuanlan.zhihu.com
代码如下:
class Solution(object):# 本题其实是变形的84题-柱状图中最大的矩形def maximalRectangle(self, matrix):""":type matrix: List[List[str]]:rtype: int"""# 首先根据给定的matrix矩阵来更新每个元素的值,规则是:以该节点为起始点按列搜索,计算值连续为1的数目for row in range(len(matrix)):for col in range(len(matrix[0])):index = row# 用来保存从[row][col]节点开始往下值连续为1的数目height = 0while index < len(matrix):if matrix[index][col] == "1":height += 1else:breakindex += 1matrix[row][col] = height# 定义该矩阵内构成的最大面积max_area = 0# 遍历每一行使用第84题的方法来更新最大面积for row in matrix:max_area = max(max_area, self.get_max_area(row))return max_area# 获取每一行对应的柱状图中最大矩形面积def get_max_area(self, heights):i = 0max_value = 0stack = []heights.append(0)while i < len(heights):if len(stack) == 0 or heights[stack[-1]] <= heights[i]:stack.append(i)i += 1else:now_idx = stack.pop()if len(stack) == 0:max_value = max(max_value, i * heights[now_idx])else:max_value = max(max_value, (i - stack[-1] - 1) * heights[now_idx])return max_valueif __name__ == "__main__":matrix = [["1", "0", "1", "0", "0"], ["1", "0", "1", "1", "1"], ["1", "1", "1", "1", "1"], ["1", "0", "0", "1", "0"]]max_area = Solution().maximalRectangle(matrix)print(max_area)
不过执行效率依旧不高,在10%左右。

相关文章:

模板的分离编译
模板不支持分离编译我们来分析一下模板为什么不支持分离编译呢,所谓的分离编译就是我们在编写程序的时候可能会出现如下的一种情况就是,(我下面就是举具体的例子了)代码//*****************template.h***********// #include<i…

什么是壳 - 脱壳篇01
什么是壳 - 脱壳篇01 让编程改变世界 Change the world by program 壳 在自然界中,植物用壳来保护种子,动物用壳来保护身体,我们人类没有壳,但我们有衣服,房子也起到了壳的作用。不仅保护,而且美观。 同…

push、pop指令
push、pop指令转载于:https://www.cnblogs.com/LoveFishC/archive/2012/07/25/3846605.html

个人前端学习路线图与github优秀前端开发者的路线图推荐
1、个人目前学习的路线图 2、github优秀前端开发者的路线图推荐 打开github首页,在搜索框输入developer-roadmap,搜索github前端路线图 选择kamranahmedse/developer-roadmap拥有56.5k的星,足以证明这个路线受到广大前端开发者的喜爱与推荐 选…

智能指针1.0
一.使用普通的动态内存开辟存在的问题 我们在使用动态内存开辟一个空间的时候,需要释放掉这个空间,不然就容易出现内存泄漏。 比如下面的程序 情况一: #include<iostream> using namespace std; int errorTest() { intflag 0; …

gen_event中的handler和supervised handler
呃,在gen_event中有两个添加handler的方法 gen_event:add_handler/3 gen_event:add_sup_handler/3 一开始总是有些迷惑两者的区别,今天查看了gen_event源码,总算弄清两者的区别。 add_handler添加的只是把gen_event作为容器,仅仅在…

动态刷新_屋盖“起飞”刷新国内记录,中建八局杭州萧山国际机场项目最新动态来袭...
近日,中建八局承建的杭州萧山国际机场三期项目完成了一件“壮举”T4航站楼首段钢屋盖网架顺利提升至设计标高一举刷新了国内机场航站屋盖单次提升的记录正式进入主楼屋面及幕墙施工的新篇章两段视频速看首段钢屋架提升刷新记录 覆盖测量全过程监控杭州萧山国际机场…

逻辑 STANDBY ORA-00368日志应用失败处理一例
故障现象:逻辑STANDBY数据库注册日志成功,但应用日志出现错误,提示“ORA-00368: checksum error in redo log block”,显然是文件受到了破坏。Tue Jul 24 08:25:59 2012LOGMINER: WARNING: error 368 encountered, failed to read…

Linux 下实现虚拟光驱功能,查看iso文件内容
1,创建挂载点(也可以不创建,直接用现有的目录)openSUSE:~ # mkdir /mnt/iso2,挂载ISO文件至创建的挂载点openSUSE:~ # mount -t iso9660 -o loop /home/ubuntu-14.04.5-server-amd64.iso /mnt/isomount参数解释:-t&…

clientcontainerThrift Types
首先声明,我是一个菜鸟。一下文章中出现技术误导情况盖不负责 来自Apache Thrift官网:Thrift Types Thrift Types The Thrift type system is intended to allow programmers to use native types as much as possible, no matter what programming lang…

简易git操作 -- 让你的格子绿起来
创建github账号 浏览器输入网址,申请一个github账号,github申请网址,看到下面的图片内容,点击图中红色框里面的内容,用邮箱账号申请一个github账号,一定记住账号和密码 填写注册信息 点击之后跳转到下面…

c语言自定义char*函数返回值是乱码_[每日C语言」printf()函数的修饰符和返回值...
在上一个小demo《printf()函数(1)》中主要说了一下printf()函数的转换说明符,这些转移说明符是可以被修饰的。我们可以在%d和定义的转义字符之间通过插入修饰符对基本的转换说明加以修改。printf()修饰符digit(s) 字符宽度的最小值结果:不够的前面补空格…

win2003辅助域服务器相关几个错误日志的解决办法
1.域助域上做了DNS后,提示:浏览器无法更新服务状态位,数据有错误,错误代码是8007关闭computer browser基本就行了,有人说还要关server,它负责共享之类的,如果关了,就不能共享了,我个人没有关!2.之前,公司主域上有DNS,不过没有允许复制区域,也没有在辅助域上做DNS,所以在辅助域上…

redis.conf配置文件参数说明
参数说明 redis.conf 配置项说明如下:1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程daemonize no2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以…

用C#来开发CAD插件,含源代
CAD插件看起来很神秘,其实一个合格码农经过几天就能快速掌握。没什么秘密,开发CAD插件和winform一样简单,多学几个类库用法就是,在CAD里展现界面和winform略有不同。学习CAD插件开发的动机是为了薪水,由于公司是做显示…

动态内存管理和智能指针 2.0 -- shared_ptr
shared_ptr出现原因 通过第一章的学习,我们知道不管是auto_ptr合适scoped_ptr都是存在缺陷的,于是我们必须想出一个方法既能很好的管理我们的内存,而且在使用的时候,可以多个指针指向一个内存,这个时候就出现了shared…

汇总同一时间段的数据_数据集干货:一文读懂Mapsidejoin
我们知道数据分析的第一步是准备数据,所以在前面的课程里,我们介绍了元数据。今天这篇文章,主要介绍大数据量组合数据集在永洪中的应用实例:Mapsidejoin。什么是Mapsidejoin?按照字面意思,Mapsidejoin就是M…

【强烈推荐】国土档案管理信息系统产品使用说明书系列目录【附下载地址】...
<<国土档案管理信息系统>>产品使用说明书系列目录【附下载地址】——通过知识共享树立个人品牌。《国土档案管理信息系统》在线视频讲解一、记大型商业软件<<国土档案管理信息系统>>之系统简介记大型商业软件 > 之系统简介 ——通过知识共享树立个人…

zip函数的使用
s [[1, 10], [1.2, 11], [2, 5], [5, 15]] data zip(*s) x_list data[0] y_list data[1] x_min min(x_list) x_max max(x_list) y_min min(y_list) y_max max(y_list) box [x_min, x_max, y_min, y_max] print(box) # [1, 5, 5, 15] 转载于:https://www.cnblogs.com/…

计算机网络基础 1.0 -- 概述
概念理解 报文:在网络中发送的数据块成为报文在发送报文之前,通常会把数组分组,每个组都有个包头和数据组成,包头中包含了诸如目标地址和源地址等重要信息,这样才保证了数据能够有目的的在网络中的传输主机是用户用来…

字符串循环同构的最小表示法(转)
循环字符串的最小表示法的问题可以这样描述: 对于一个字符串S,求S的循环的同构字符串S’中字典序最小的一个。 由于语言能力有限,还是用实际例子来解释比较容易:设Sbcad,且S’是S的循环同构的串。S’可以是bcad或者cad…

周长相等的正方形面积一定相等_必考单元:三年级下册面积计算公式+知识点+测试卷(附答案),重点内容,收藏练习!...
《面积》公式 知识点面积和面积单位:1.常用的面积单位有:(平方厘米)、(平方分米)、(平方米)。2.理解面积的意义和面积单位的意义。面积:物体表面或封闭图形的大小,叫做它们的面积。1平方米:边长是1米的正方形ÿ…

sql server 2000 版本查询
确定已安装的 SQL Server 2000 Database Components 版本 使用 isql、osql 或查询分析器,对数据库引擎实例执行以下查询之一。 SELECT SERVERPROPERTY(ProductLevel) SELECT VERSION SELECT SERVERPROPERTY(Produc…

ubuntu16创建开机启动服务
1、cd /etc/init.d/ 2、sudo touch zookeeper(举例) 3、给服务赋权限:sudo chmod x zookeeper 4、执行sudo vim zookeeper 命令写入执行脚本(启动脚本中的启动命令对应服务的启动命令) #! /bin/sh### BEGIN INIT INFO …

Effective C++ 1.0 -- 概述
声明 对象声明,函数声明,类型声明,是告诉编译器某个东西的 名称和类型,但是略去了实现 细节,因为定义在其他的地方。 external int x; //对象(object)声明 std:size_t numDigits(int num…

寻找连通域算法_【车牌识别算法】
车牌识别技术要求能够将运动中的汽车牌照从复杂背景中提取并识别出来,通过车牌提取、图像预处理、特征提取、车牌字符识别等技术,识别车辆牌号、颜色等信息。目前车牌识别技术主要分为端到端识别与车牌分割识别两种识别算法。端对端识别技术端到端车牌识…

SQL 2005 删除带有默认值约束的列
在sqlserver 2005中要删除某一列: alter table [表名] drop column [列名] 但是如果该列被创建了默认值约束,我们就只能先删除默认值约束,然后才能删除该列。 第一种方法: 1、删除默认值约束: DECLARE name varchar(100) SELECT nameb.name F…

apple hosts
2019独角兽企业重金招聘Python工程师标准>>> #Apple #125.56.202.7 swcnd.apple.com 203.69.138.34 a1.phobos.apple.com 203.69.138.34 a2.phobos.apple.com 203.69.138.34 a3.phobos.apple.com 203.69.138.34 a4.phobos.apple.com 203.69.138.34 a5.phobos.apple.…

thymeleaf 的常见属性
转载于:https://www.cnblogs.com/hwgok/p/9637723.html

继承和多态 1.0 -- 继承概念(is-a、has-a,赋值兼容规则,隐藏重定义)
普通继承和访问权限 当一个继承没有虚拟继承或者是多重继承时,就是一个简单的继承的时候,这个时候就是一个普通的继承。 普通继承的内存空间是:子类的对象中,包含了父类的成员变量,同时也可以调用父类的成员函数&…