目录
- 题目描述:
- 输入:
- 输出:
- 代码实现:
题目描述:
给定 n 个非负整数表示每个宽度为 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 个单位的雨水(蓝色部分表示雨水)。
代码实现:
class Solution {
public int trap(int[] height) {
int left = 0;// 左指针
int right = height.length - 1;// 右指针
int leftHigh = 0;// 左边界高度
int rightHigh = 0;// 右边界高度
int sum = 0;// 最终雨水总量
// 左右指针同时向数组中间遍历
while (left < right) {// 当左指针等于右指针时,跳出循环
leftHigh = Math.max(height[left], leftHigh);// 获取左边界最大高度
rightHigh = Math.max(height[right], rightHigh);// 获取右边界最大高度
if (height[left] < height[right]) {
// 当右方高度大于左方高度时,计算左方水坑区域雨水数
sum += (leftHigh - height[left]);// 累加:左边界减去当前深度
left++;// 左指针左移
} else {
// 其他情况,计算右方水坑区域雨水数
sum += (rightHigh - height[right]);// 累加:右边界减去当前深度
right--;// 右指针右移
}
}
return sum;// 返回结果
}
}