Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.
For example,
Given[0,1,0,2,1,0,1,3,2,1,2,1], return6.
The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped. Thanks Marcos for contributing this image!
public class Solution {
public int trap(int[] A) {
/*计算最高的位置,那么它两边的水就取决于左边高度和右边高度*/
int maxIndex=0;
for(int i=0;i<A.length;i++){
if(A[i]>A[maxIndex]){
maxIndex=i;
}
}
int left=0,right=0;
int sum=0;
for(int i=0;i<maxIndex;i++){
if(A[i]<left){
sum+=left-A[i];
}else{
left=A[i];
}
}
for(int i=A.length-1;i>maxIndex;i--){
if(A[i]<right){
sum+=right-A[i];
}else{
right=A[i];
}
}
return sum;
}
}