【每日一题】柱状图中最大的矩形——单调栈练习题

本文通过每日一题介绍了使用单调栈解决柱状图中找最大矩形面积和接雨水问题。单调栈在柱形图问题中用于寻找连续无更高长方形的左侧边界,并在弹出时计算面积。对于接雨水问题,单调减栈用于找到比当前位置高的左右边界,从而计算积水量。
摘要由CSDN通过智能技术生成

2020/05/30 单调栈的练习题目

引言

单调栈的题目是比较技巧的一类题目,涉及到什么样的问题考虑采用单调栈;单调的选取,选择单调增还是单调减;单调栈的维护;以及如何利用单调性解决问题。

柱形图问题

在这里插入图片描述

一种典型的单调栈问题。之所以思考采用单调栈的方法是因为计算每个部分的面积与最大最小的关系有关。

在计算面积时候回去寻找当前长方形的左右大于该高度的连续长方形。因此采用单调栈的话,我们需要找一个单调增的栈,保证该长方形左侧连续无更高的长方形。并且在每次被弹出时计算该高度的长方形的最大宽度。因为被弹出时说明右侧最大连续高长方形也已经被找到。因此可以完整的计算面积。

这类问题有一个细节,需要补充两端的0,保证封闭整个数组,因为只有在弹出时才会计算面积,因此右端补零保证全部弹出;左端补0保证计算时候能找寻到左端点。

class Solution(object):
    def largestRectangleArea(self, heights):
        ## 维护一个单增的栈
        heights = [0]+heights+[0]
        stack 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值