標籤:desc http section 題目 ret size public ase static
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 Marcosfor contributing this image!
題目如上。假期最後一道hard難度的題,先放上之前實現的代碼,還可以簡化
1 class Solution { 2 public: 3 int trap(vector<int>& height) { 4 int sum=0; 5 for(int i=0;i<height.size();++i){ 6 for (int j=i+1;j<height.size();++j) { 7 if(height[j]>=height[i]){ 8 sum+=height[i]*(j-i-1); 9 //可最佳化,m->i10 for(int m=i+1;m<j;++m){11 sum-=height[m];12 }13 i=j-1;14 break;15 }16 if(j==height.size()-1){17 int max=height[i+1];18 int max_i=i+1;19 for(int n=max_i+1;n<height.size();++n){20 if(height[n]>max){21 max=height[n];22 max_i=n;23 }24 }25 sum+=height[max_i]*(max_i-i-1); 26 for(int m=i+1;m<max_i;++m){27 sum-=height[m];28 }29 i=max_i-1;30 }31 }32 33 }34 return sum;35 }36 };
leetcode42. Trapping Rain Water