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
.
先计算每个格左边和右边最高的,然后再便利一遍算出每格可以容纳的水min( max_left[i], max_right[i]) - A[i]
class Solution {
public:
int trap(int A[], int n) {
if( n < 3)
return 0;
int *max_left = new int[n]();
int *max_right = new int[n]();
max_left[0] = A[0];
for( int i = 1; i < n; ++i)
max_left[i] = max( max_left[i-1], A[i]);
max_right[n-1] = A[n-1];
for( int i = n - 2; i >= 0; --i)
max_right[i] = max( max_right[i+1], A[i]);
int res = 0;
for( int i = 0; i < n; ++i){
res += min( max_left[i], max_right[i]) - A[i];
}
delete [] max_left; delete [] max_right; return res;
}
};