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]
, return 6
.
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!
参考网上解答
首先 第一遍循环 找到最大的值所在的MaxIndex。
第二遍循环 从左边到MaxIndex.计算水量。就是目前最大的值减去 碰到的值,就是最大和当前那条柱子的容积
第三遍循环 从最右边 到MaxIndex 方法一样。
class Solution {
public:
int trap(int A[], int n) {
int maxHeightIndex=0;
int maxHeight=A[0];
int totalWater=0;
for(int i=0; i<n; i++){
if(maxHeight<A[i]){
maxHeightIndex=i;
maxHeight=A[i];
}
}
int leftMax=A[0];
for(int i=1; i<maxHeightIndex; i++){
if(A[i]>leftMax)
leftMax=A[i];
else
totalWater+=leftMax-A[i];
}
int rightMax=A[n-1];
for(int i=n-2; i>maxHeightIndex; i--){
if(A[i]>rightMax)
rightMax=A[i];
else
totalWater+=rightMax-A[i];
}
return totalWater;
}
};