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!
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int trap(int A[], int n) {
if (n == 0)
return 0;
vector<int>Lefthigh(n, 0);
vector<int>Righthigh(n, 0);
Lefthigh[0] = A[0];
Righthigh[n - 1] = A[n - 1];
for (int i = 1; i < n;++i)
Lefthigh[i] = A[i]>Lefthigh[i - 1] ? A[i] : Lefthigh[i - 1];
for (int i = n - 2; i >= 0; --i)
Righthigh[i] = A[i] > Righthigh[i + 1] ? A[i] : Righthigh[i + 1];
int sum = 0;
for (int i = 0; i != n;++i)
{
int tmp = min(Lefthigh[i], Righthigh[i]) - A[i]>0 ? min(Lefthigh[i], Righthigh[i]) - A[i]:0;
sum += tmp;
}
return sum;
}