问题1:怎么算接水量
- 总的接水量=第一列接水量+第二列接水量+第三列接水量+…+最后一列接水量
问题2:当前列的接水量怎么计算
- 当前的接水量=min(当前列左边最高的墙x1,当前列右边最高的墙x3)- 当前列x2的高度
问题2图解:
方法:预处理每一列左边最高的墙+预处理每一列右边最高的墙(记录下标)
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;
}
};