接雨水
给定 n
个非负整数表示每个宽度为 1
的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
示例 1:
输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。
示例 2:
输入:height = [4,2,0,3,2,5] 输出:9
实现思路:
接雨水问题的实现思路主要基于以下观察:
-
局部最大值:一个柱子能接雨水的量取决于它左右两边最高的柱子高度中的较小值(因为雨水只能在两者较低的一侧积累)。
-
双指针:使用两个指针
left
和right
分别从数组的两端向中间遍历。这样可以同时考虑左右两边的柱子高度。 -
维护最大高度:在遍历过程中,维护两个变量
leftMax
和rightMax
来记录从左边和右边开始遍历到目前为止遇到的最高的柱子高度。 -
计算雨水量:当遍历到的柱子高度小于 <