【数据结构】单调栈(概念,应用:最大矩形、雨水、牛、左右边界)

递增(减)栈应用场景:针对某个数,寻找它和它【左/右】两边第一个比他【大/小】的数,以及相距多少距离。1. 接雨水针对某个洼地,当前能接的雨水等于左右两侧【最大高度】的最小值-当前洼地的高度。(> O(N2)O(N^2)O(N2))对于某个洼地来说,其能盛水的量由【左右边界确定】,对于洼地> j0,j1,j0<j1,H[j0]<H[j1]j_0,j_1,j_0<j_1,H[j_0]<H[j_1]j0​,j1​,j0​<j1​,H[j0​]<H[j1
摘要由CSDN通过智能技术生成

递增(减)栈

应用场景:
针对某个数,寻找它和它【左/右】两边第一个比他【大/小】的数,以及相距多少距离。
1. 接雨水
针对某个洼地,当前能接的雨水等于左右两侧【最大高度】的最小值-当前洼地的高度。(> O ( N 2 ) O(N^2) O(N2)
对于某个洼地来说,其能盛水的量由【左右边界确定】,对于洼地> j 0 , j 1 , j 0 < j 1 , H [ j 0 ] < H [ j 1 ] j_0,j_1,j_0<j_1,H[j_0]<H[j_1] j0,j1,j0<j1H[j0]<H[j1]> ,显然1的左边届由0界定,将其加入栈中,待确定其右边界,当有
j 2 > j 1 , H [ j 2 ] > H [ j 1 ] 时 , j_2>j_1,H[j_2]>H[j_1]时, j2>j1,H[j2]>H[j1]显然1的右边界由2界定,弹出1,其为最低高度,并得到当前栈顶0故0-1-2之间可以存水【 m i n ( H [ j 2 ] , h [ j 0 ] ) ∗ ( j 2 − j 0 + 1 ) min(H[j_2],h[j_0])*(j_2-j_0+1) min(H[j2],h[j0])(j2j0+1)
【stack.top()<cur,确定右边界,弹出,故使用递减栈> ↓> 】
2. 柱形图中最大的矩形
针对某个柱子,其能形成的最大矩形由其左右两侧【最近的小于其高度】的柱子决定(> O ( N 2 ) O(N^2) O(N2)
1.针对某个柱子p,在其( 从前向后遍历之前 j 0 , j 1 , j 0 < j

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值