直方图收集雨水问题:

给定n个非负整数,表示直方图的方柱的高度,同时,每个方柱的宽度假定都为1,若这样形状的容器收集雨水,可以盛多少雨水。

如:输入0,1,0,2,1,0,1,3,2,1,2,1;返回为6.

如图所示:

程序实现:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int TrappingRainWater(int A[],int n){
 5     int SecHight = 0;//当前找到的第二大数
 6     int left = 0;
 7     int right = n-1;
 8     int trap = 0;//依次遍历每个方柱能装水的容量
 9     while(left<right){
10         if(A[left]<A[right]){
11             SecHight = max(SecHight,A[left]);
12             trap += (SecHight-A[left]);
13             left++;
14         }
15         else{
16             SecHight = max(SecHight,A[right]);
17             trap +=(SecHight-A[right]);
18             right--;
19         }
20     }
21     return trap;
22 }
23 int main()
24 {
25     int A[] ={0,1,0,2,1,0,1,3,2,1,2,1};
26     cout<<TrappingRainWater(A,sizeof(A)/sizeof(int))<<endl;
27     return 0;
28 }

运行结果:

转载请注明出处:

C++博客园:godfrey_88

http://www.cnblogs.com/gaobaoru-articles/