接雨水
给定 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
提示:
n == height.length 1 <= n <= 2 * 104 0 <= height[i] <= 105
class Solution {
public int trap(int[] height) {
int len=height.length;
int[] a=new int[len];
int[] b=new int[len];
int ans=0;
a[0]=height[0];
b[len-1]=height[len-1];
for(int i=1;i<len;i++){
a[i]=Math.max(height[i],a[i-1]);
}
for(int i=len-2;i>=0;i--){
b[i]=Math.max(height[i],b[i+1]);
}
for(int i=0;i<len;i++){
ans+=Math.min(a[i],b[i])-height[i];
}
return ans;
}
}
class Solution {
public int trap(int[] height) {
int a=0,b=0;
int l=0,r=height.length-1;
int ans=0;
while(l<r){
a=Math.max(a,height[l]);
b=Math.max(b,height[r]);
ans+=a<b?(a-height[l++]):(b-height[r--]);
}
return ans;
}
}