84. 柱状图中最大的矩形(Python实现)

【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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值