Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.
For example,
Given [0,1,0,2,1,0,1,3,2,1,2,1],
return 6.
思路:先找出最大的数字(这个思路我怎么没想到呢,思路其实也很简单。。。。)
代码:
int trap(int A[], int n)
{
if(n<3 || A==NULL)
{
return 0;
}
int maxIndex=0;
for(int i=0; i<n; ++i)
{
if(A[i]>A[maxIndex])
{
maxIndex=i;
}
}
int countTrap=0;
int leftMax=A[0];
for(int i=0; i<maxIndex; ++i)
{
if(A[i] < leftMax)
{
countTrap+=leftMax-A[i];
}
else
{
leftMax=A[i];
}
}
int rightMax=A[n-1];
for(int j=0; j>maxIndex; --j)
{
if(A[j] < rightMax)
{
countTrap+=rightMax-A[j];
}
else
{
rightMax=A[j];
}
}
return countTrap;
}
本文介绍了一种计算一维地形图上雨水积存量的方法。通过寻找地形中的最高点,并分别从左到右和从右到左计算可以积累的水量,最终得出总的积水体积。
212

被折叠的 条评论
为什么被折叠?



