题目描述
给出n个数字,表示一个高程图,高程图中每一条的宽度为1,请计算下雨之后这个地形可以存储多少水
例如
给出[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个单位的雨水(蓝色部分)被存储。
用数组方法,先找到数组中的最大值;
再计算最大值左侧可以存储的水量;
再计算最大值右侧可以存储的水量。
public class Solution {
public int trap(int[] A) {
if(A.length<3)
return 0;
int maxvalue=0,k=0;
int left=0,right=0;
int res=0;
for(int i=0;i<A.length;i++){
if(A[i]>maxvalue){
k=i;
maxvalue=A[i];
}
}
for(int i=0;i<k;i++){
if(A[i]<left){
res=res+left-A[i];
}
else{
left=A[i];
}
}
for(int i=A.length-1;i>k;i--){
if(A[i]<right){
res=res+right-A[i];
}
else{
right=A[i];
}
}
return res;
}
}