LeetCode 84. 柱状图中最大的矩形 题解 C/C++


举一个对应本题的单调栈的例子,了解了这个过程本题肯定就会了

例子 heights = [6, 7, 5, 2, 4, 5, 9, 3]
我们需要求出每一根柱子的左侧且最近的小于其高度的柱子。初始时的栈为空。

我们枚举 6,因为栈为空,所以 6 左侧的柱子是「哨兵」,位置为 -1。随后我们将 6 入栈。

栈:[6(0)]。(这里括号内的数字表示柱子在原数组中的位置)
我们枚举 7,由于 6<7,因此不会移除栈顶元素,所以 7 左侧的柱子是 6,位置为 0。
随后我们将 7 入栈。

栈:[6(0), 7(1)]
我们枚举 5,由于 75,因此移除栈顶元素 7。同样地,65,再移除栈顶元素 6。
此时栈为空,所以 5 左侧的柱子是「哨兵」,位置为 −1。随后我们将 5 入栈。

栈:[5(2)]
接下来的枚举过程也大同小异。我们枚举 2,移除栈顶元素 5,得到 2 左侧的柱子是「哨兵」,
位置为 -1。将 2 入栈。

栈:[2(3)]
我们枚举 459,都不会移除任何栈顶元素,得到它们左侧的柱子分别是 245,
位置分别为 345。将它们入栈。

栈:[2(3), 4(4), 5(5), 9(6)]
我们枚举 3,依次移除栈顶元素 954,得到 3 左侧的柱子是 2,位置为 3。将 3 入栈。

栈:[2<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值