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!
Solution:Code:
<span style="font-size:14px;">class Solution {
public:
int trap(int A[], int n) {
int leftHighest[n];
leftHighest[0] = 0;
for (int i = 1; i < n-1; ++i)
leftHighest[i] = max(leftHighest[i-1], A[i-1]);
int result = 0;
int rightHighest = A[n-1];
for (int i = n-2; i > 0; --i) {
result += max(0, min(leftHighest[i], rightHighest)-A[i]);
rightHighest = max(rightHighest, A[i]);
}
return result;
}
};</span>