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;
}
解法:设定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;
}
相关文章推荐
- LeetCode-Trapping Rain Water
- leetcode - Trapping Rain Water
- Leetcode Trapping Rain Water
- [leetcode] Trapping Rain Water
- [leetcode]Trapping Rain Water
- leetcode[42]Trapping Rain Water
- [leetcode] Trapping Rain Water
- [LeetCode] Trapping Rain Water
- LeetCode(42)--Trapping Rain Water
- leetcode - Trapping Rain Water
- LeetCode 42 --- Trapping Rain Water
- leetcode Trapping Rain Water
- LeetCode - Trapping Rain Water
- LeetCode Trapping Rain Water
- leetcode解题笔记-Trapping Rain Water
- Java [Leetcode 42]Trapping Rain Water
- [leetcode 42] Trapping Rain Water
- LeetCode解题报告—— Trapping Rain Water
- [Leetcode] Trapping Rain Water
- [LeetCode] Trapping Rain Water