Leetcode 42. 接雨水
原创
©著作权归作者所有:来自51CTO博客作者Java全栈研发大联盟的原创作品,请联系作者获取转载授权,否则将追究法律责任
题目传送地址: https://leetcode.cn/problems/trapping-rain-water/

解题思路:
从中间一分为二,先算左边能接到多少雨水,然后再计算右边能接到多少雨水。最后加起来就是总和

代码如下
public static int trap(int[] height) {
//该位置往右的方向,最高峰的高度是多少
int result = 0; //总雨水数
int left = 0, right = 1;
// 先算左侧接到的雨水
for (int i = 0; i < height.length; i++) {
if (right == 1) {
while (right < height.length) {
if (height[left] > height[right]) {
right++;
} else {
break;
}
}
if (right==height.length){
break;
}
}
if (i < right) {
result += height[left] - height[i];
}
if (i == right) {
//那就得找下一个右高峰
left = right;
right++;
while (right < height.length) {
if (height[left] > height[right]) {
right++;
} else {
break;
}
}
if (right == height.length) {
break;
}
}
}
//再算右边接到的雨水
right = height.length - 1;
for (int i = height.length - 1; i > left; i--) {
if (height[i] < height[right]) {
result += height[right] - height[i];
}
if (height[i] >= height[right]) {
right = i;
}
}
return result;
}