Trapping Rain Water

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 };

Trapping Rain Water_第1张图片

你可能感兴趣的:(water)