Trapping Rain Water

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!

class Solution {
public:
     int trap( int A[],  int n) 
    {
         int count= 0;
         if(n<= 2return count;
        
         int h[n];h[ 0]=A[ 0];
         for( int i= 1;i<n;i++)
             if(A[i]>h[i- 1]) h[i]=A[i];
             else h[i]=h[i- 1];
        h[n- 1]=A[n- 1];
         for( int i=n- 2;i>= 0;i--)
        {
             if(h[i]<=h[i+ 1])  break;
            
             if(A[i]>h[i+ 1]) h[i]=A[i];
             else h[i]=h[i+ 1];
        }
        
         for( int i= 0;i<n;i++)
            count=count+h[i]-A[i];
        
         return count;
    }
};  

你可能感兴趣的:(water)