直方图收集雨水问题:
给定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/
时间: 2024-10-06 21:53:01