【LeetCode 练习题笔记】84. 柱状图中最大的矩形
问题描述
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为[2,1,5,6,2,3]
解题思路
解题思路可以参考官方题解:官方题解入口
判断前一个柱子是否大于当前柱子,若大于自然不是,继续往前比较,而比前面一个柱子还要大的柱子自然没有存在的必要了;遍历的时候维护一个按坐标顺序小于当前值的列表(在这里用栈)。对于每一次计算,大于前一个柱子的柱子都被跳过,前面只剩小于的柱子,所以自然是单调增的列表;第一个小于当前的柱子的柱子值即为需要的下标,再将自身放入列表,对下一个柱子来说,大于前一个柱子的柱子都已经跳过了,所以只需比较列表中剩余的柱子值即可,与前一题的双指针遍历意思相近。本质是去除重复的比较,也是一种动态规划的思想,保留计算过的值。
代码片段(python实现)
class Sloution:
@staticmethod
def findmaxsquare(heights):
i = 0
max_square = 0
stack = []
heights.append