| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> Leetcode. Largest Rectangle in Histogram -> 正文阅读 |
|
[数据结构与算法]Leetcode. Largest Rectangle in Histogram |
1. 题解题目链接🔗:84. Largest Rectangle in Histogram 这道题和42. Trapping Rain Water有些相像,但是42题求的是能围住的最大面积,而本题求的是连成的矩阵的最大面积,因而在计算面积的方法上有些许不同。85. Maximal Rectangle就是在本题基础上的变式,通过一系列变化可以使用本题方法。 分析简单分析可以知道最大矩形面积有两种情况:
经过进一步归纳发现,第一种情况其实包含于第二种情况。 解法一:DP根据上述描述,如果我们每次遍历到一个index,就可以知道左右需要的index,就可以直接计算最大面积。所以本题应该构建两个数组,来存储每一个index向左第一个较小矩形的index和向右第一个较小矩形的index的数组。
注意代码的第13行 最后比较每一个index上能构成的矩阵的最大面积
复杂度 时间:O(N) 空间:O(N) 解法二:Stack核心思想类似解法一,但是我们不再存储左右index,而是使用stack来存储左边的index。stack中的index代表的height单调递增(严格递增),每当遇到比stack中peek()的height小的值就开始计算面积(遇到小的height,说明stack中存储的height已经达到当前最高)。
直接看代码有些抽象,可以通过画图理解,但是本质思想是:如果遇到更高的就存储起来,如果遇到较低的就开始开始从stack中取index进行比较。因为遇到更高的意味着面积可能更大,遇到低的(或是把数组遍历完了)意味着遇到了面积的上限,需要计算比较了。 复杂度 时间:O(N):因为stack里最多累计存储N个index,每个index最多被存储一次,所以每个index最多被访问两次,时间复杂度是O(2*N) = O(N) 空间:O(N) 2. 相关题目42. Trapping Rain Water这里简单提一下42. Trapping Rain Water的三种解法,细节不做展开: 参考自:https://www.youtube.com/watch?v=StH5vntauyQ
85. Maximal Rectangle85. Maximal Rectangle看似需要用到DP table等技巧,但其实可以通过变化把问题抽象成84. Largest Rectangle in Histogram:
复杂度 时间:O(row * col) 空间:O(col) |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 11:30:50- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |