7.接雨水
42. 接雨水
给定 n
个非负整数表示每个宽度为 1
的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
示例 1:
1 |
|
示例 2:
1 |
|
提示:
n == height.length
1 <= n <= 2 * 104
0 <= height[i] <= 105
题目思路
为什么使用单调栈?
因为如果柱子的高度是单调递减的,那么肯定存不下雨水,这样我们就将单调递减的柱子加入单调栈,这样如果一个高的柱子入栈,会导致栈顶元素出栈,我们就可以做出栈的时候进行水的容量计算「只有出栈的时候可能会存雨水」
- 遍历所有的柱子,对于每个柱子,将其信息存储在
right
中。 - 当栈不为空且栈顶元素的高度小于
right
的高度时,从栈中弹出元素pop
,并取栈顶元素作为left
。 - 计算
left
和right
之间能存储雨水的空间,即根据宽度和高度的计算(宽度为right.index - left.index - 1
,高度为Math.min(right.height, left.height) - pop.height
),将计算结果累加到sum
中。 - 最终得到的
sum
就是整个柱状图能存储的雨水总量。
题解代码
1 |
|
7.接雨水
http://example.com/2025/01/15/007-接雨水/