题解 | #接雨水问题#
接雨水问题
http://www.nowcoder.com/practice/31c1aed01b394f0b8b7734de0324e00f
力扣官方的 题解图片 加上代码 一下就懂了
import java.util.*;
public class Solution {
//以 3 1 2 5 2 4 为例
//从左向右扫描,遇到比第一个数大的则构成一个桶,计算盛多少水
//然后再从右向左扫描一遍
public long maxWater (int[] arr) {
if (arr == null || arr.length == 0) {
return 0;
}
int low = 0;
long sum = 0;
long tmp = 0;
//从左向右
for (int i = 0; i < arr.length; i++) {
if (arr[low] > arr[i]) {
tmp = tmp + arr[low] - arr[i];
}
if (arr[low] <= arr[i]) {
sum = sum + tmp;
tmp = 0;
low = i;
}
}
low = arr.length-1;
tmp = 0;
//从右向左
for (int j = arr.length-1; j >= 0; j--) {
if (arr[low] > arr[j]) {
tmp = tmp + arr[low] - arr[j];
}
//注意这里不能再 <=,否则可能会重复计算等于的情况
if (arr[low] < arr[j]) {
sum = sum + tmp;
tmp = 0;
low = j;
}
}
return sum;
}
}
LeetCode从零开始 文章被收录于专栏
LeetCode已经马上两千题了,不知道从哪里开始,那就从现在开始吧,每天一题,不用做很多,不用做很难,一天主攻一道题,一题多解,提高自己的思维高度,开阔自己的思考角度,加油一起Geek
