今天在制作书签的时候

突然想到了一个问题

如果要送给未来的女朋友一个书签

上面该写些什么话

哈哈哈哈哈哈哈哈哈

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%左右。

语音计算矩形面积_LeetCode85-最大矩形相关推荐

  1. 设计一个矩形类,完成计算矩形面积和显示矩形属性的功能。

    / /* [基本题]设计一个矩形类,完成计算矩形面积和显示矩形属性的功能. */ #include<iostream> using namespace std; class Retangl ...

  2. 850.矩形面积 II 【矩形的分解】

    题解 启发式解法-矩形分解 思路 因为多个矩形重叠部分的面积只需要计算一次,因此可以想到将重叠的多个矩形转化为多个不重叠的矩形,最后通过计算不重叠矩形中所有的矩形面积得到答案. 所需要的前置知识,针对 ...

  3. HDU 3265(矩形面积并-分割矩形)

    Posters Problem Description 有很多海报,每个海报都被减去了一个矩形(可能全减),现在给出没张海报的位置,求它们的面积并. 保证坐标在(0, 0)到(50000, 50000 ...

  4. 求圆形矩形面积java_Java求矩形面积和圆形面积的异常处理实例

    题目 有一个圆形和长方形. 都可以获取面积,对于如果如果出现非法值,视为是获取面积出现问题. 问题通过异常来表示. 现在对这个程序进行基本设计 代码如下 package com.liuyanzhao; ...

  5. 01矩阵最大正方形面积、01矩阵最大矩形面积、直方图最大矩形面积

    01矩阵最大正方形面积 题意:给定一个矩阵,其中的元素为0或者1,要求找出其中元素全为1的面积最大的正方形. 题解:动态规划:对每个元素,把以其为右下角,元素全为1的正方形的最长边长记录下来.如果以元 ...

  6. 直方图中最大矩形面积

    原文地址:http://www.geeksforgeeks.org/largest-rectangle-under-histogram/ 注意:本文并未对原文完整翻译,而是结合原文并根据本人理解写出, ...

  7. c语言直方图最大矩形面积,直方图中最大矩形面积(示例代码)

    注意:本文并未对原文完整翻译,而是结合原文并根据本人理解写出,因此部分内容为完整翻译,部分内容为个人理解所写. Largest Rectangle in Histogram 直方图中最大矩形面积 一个 ...

  8. 定义一个图形类及其子类,计算其面积和周长

    class Graphical {//父类 public double width;//成员变量 public double length; public double area; public do ...

  9. 编写矩形类 计算矩形面积

    编写矩形类 计算矩形面积 public class juxing {int a;int b; juxing(int a,int b){System.out.println("矩形面积s=&q ...

最新文章

  1. unity中的UI状态机,用于各界面之间的切换和跳转
  2. vs如何将工程配置,保存到属性表
  3. 对管理学的认识 知乎摘抄
  4. 释放锁以及添加线程对于队列的变化
  5. [HTML]HTML5实现可编辑表格
  6. LeetCode刷题:向数组中追加 K 个整数
  7. python基础语法实验要求_Python基础语法-关于条件
  8. 湖南计算机对口专科学校,湖南计算机专业对口升学有哪些学校?
  9. php ajax跳转,ajax接口的php文件如何实现跳转
  10. Atitit.ide技术原理与实践attilax总结
  11. 检测到您尚未安装ALEXA工具条
  12. 《英特尔 oneAPI—打开异构新纪元》
  13. 岩土工程颗粒流软件PFC6.0技巧——按计算时间导出数据、图像及保存文件
  14. 托业单词表Part2
  15. 老毛桃u盘装系统linux,分享老毛桃u盘装系统教程
  16. linux wrf 系统_linux wrf
  17. PS羽化N个像素后填充淡绿色
  18. 7-15 福到了 c语言,7-7 福到了 (15分)
  19. 批量识别图片文字并存为Excel,几行Python轻松实现!
  20. 时序信号的时域、频域、时-频域特征提取

热门文章

  1. Linux多线程管理: 多线程编程
  2. 强大的Charles的使用,强大的flutter1.9
  3. Linux ISCSI配置
  4. .net之工作流工程展示及代码分享(二)工作流引擎
  5. 写得不错的几篇C/C++博客
  6. 软件体系架构模式之三微内核体系架构
  7. Memcached安装使用和源码调试
  8. VSS的每日自动备份
  9. 控件的呈现方法(Rendering)的内核
  10. WMI技术介绍和应用——Event Provider