您的位置:首页 > 移动开发

leetCode_Trapping Rain Water

2016-09-03 09:30 253 查看
题意:给定n个非负数代表每个柱子的高度,宽度均为1。问能在空间里放多少水。

解法:设定previous与next,然后移动next,找到第一个比prevoius高的或者比prevoius低的柱子当中最高的。然后两者较低的乘以宽度-所有柱子的高度之和即为prevoius,next之间的蓄水量。然后让prevoius=next,依次循环。挺虐的,做了小半天才AC。

代码:

int trap(vector<int>& height)
{
int i=0,j,ans=0,size=height.size(),has=0,tsum=0,r=0,ti,pre,next,tmax;
if(height.size()==0) return 0;
while(height[i]==0) i++;
pre=i;
next=i+1;

while(pre<size-1)
{
tsum=height[pre];
tmax=-1;
while(height[next-1]>height[next]&&next<size)
{
tsum=tsum+height[next];
next++;
}
if(next>=size) break;
while(next<size)
{
tsum=tsum+height[next];
if(height[next]>=height[pre])
{
tmax=height[next];
ti=next;
break;
}
else
{
if(tmax<height[next])
{
tmax=height[next];
ti=next;
}
}
next++;
}
if(height[ti]>=height[pre])ans=ans+min(height[pre],height[ti])*(ti-pre+1)-tsum+abs(height[pre]-height[ti]);
else for(i=pre;i<=ti;i++) if(height[i]<height[ti]) ans+=height[ti]-height[i];
pre=ti;
next=ti+1;

}

return ans;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: