Given n non-negative integers representing an elevation map where the width of each bar are 1, compute how much WA ter It is the 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 the Rain Water (blue section) is being trapped. Thanks Marcos for contributing this image!
The key problem is Get B[i] and C[i], where b[i] means the max forward, and c[i] means Max backward.
Sum + = Min (B[i], c[i])-a[i] >0? Min (B[i], c[i])-a[i]:0
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
class Solution { public
:
int trap(
int A[],
int n) {
int
* B =
new int
[n];
int sum = 0;
int max= 0;
for
(
int i = 0 ;i<n;i++)
{
B[i]=max;
if
(max < A[i])
{
max=A[i];
}
}
max =0 ;
for
(
int i=n-1; i>=0 ;i--)
{
int h = B[i];
if
(B[i] > max)
{
h = max;
}
if
(A[i] < h)
{
sum += h-A[i];
}
if
(max < A[i])
{
max=A[i];
}
}
delete
[] B;
return sum;
} };
|