题目传送地址: ​​https://leetcode.cn/problems/trapping-rain-water/​

Leetcode 42. 接雨水_i++


解题思路:

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

Leetcode 42. 接雨水_职场和发展_02


代码如下

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;
}