cpp
复制代码
class Solution
{
public:
int trap(vector<int>& height)
{
int n=height.size();
int leftMax[n],rightMax[n];
memset(leftMax,0,sizeof(int)*n);
memset(rightMax,0,sizeof(int)*n);
int lmax=height[0];
int rmax=height[n-1];
for(int i=1;i<n;i++) //预处理,没自己写看起来有点小难懂,自己模拟写一个即可
{
leftMax[i]=lmax;
lmax=max(lmax,height[i]);
rightMax[n-i-1]=rmax;
rmax=max(rmax,height[n-i-1]);
}
int sum=0;
for(int i=1;i<n-1;i++) //一列一列的算,为什么不算第一列和最后一列,因为最左边和最右边就是边界,相当于最后的墙
{
if(min(leftMax[i],rightMax[i])<=height[i])continue;
sum+=min(leftMax[i],rightMax[i])-height[i];
}
return sum;
}
};