Question:
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:
1 class Solution { 2 public: 3 int trap(vector<int>& height) { 4 int n=height.size(); 5 int sum=0; 6 int *max_left=new int[n]; 7 int *max_right=new int[n]; 8 max_left[0]=0; 9 max_right[n-1]=0; 10 for(int i=1;i<n-1;i++) 11 { 12 max_left[i]=max(max_left[i-1],height[i-1]); 13 max_right[n-1-i]=max(max_right[n-i],height[n-i]); 14 } 15 for(int j=1;j<n-1;j++) 16 { 17 int val=min(max_left[j],max_right[j]); 18 if(val>height[j]) 19 sum+=val-height[j]; 20 } 21 return sum; 22 } 23 };