標籤:
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