一个点所能容纳的水由它左侧和右侧的最大高度决定,两次扫描得到最大高度,这个点能容纳的水量是由最大高度里面的最小值减去点的高度决定
class Solution {
public:
int trap(int A[], int n) {
if(n<=2)
return 0;
int leftmax[n];
leftmax[0]=0;
int maxheight=A[0];
for(int i=1;i<n;i++)
{
leftmax[i]=maxheight;
maxheight=max(maxheight,A[i]);
}
int res=0;
maxheight=A[n-1];
for(int i=n-2;i>0;i--)
{
int container=min(leftmax[i],maxheight)-A[i];
res=res+(container>0?container:0);
maxheight=max(maxheight,A[i]);
}
return res;
}
};