leetcode-42
代码如下,使用语言C
使用算法,暴力算法
int trap(int* height, int heightSize){
int i,sum=0;
for(i=1;i<heightSize-1;i++)
{
int j,leftmax=i-1,leftmaxheight=height[i-1],rightmax=i+1,rightmaxheight=height[i+1];
for(j=i-1;j>=0;j--)
{
if(height[j]>leftmaxheight)
{
leftmax=j;
leftmaxheight=height[j];
}
}
for(j=i+1;j<heightSize;j++)
{
if(height[j]>rightmaxheight)
{
rightmax=j;
rightmaxheight=height[j];
}
}
if(leftmaxheight>height[i]&&rightmaxheight>height[i])
{
if(leftmaxheight>rightmaxheight)
sum=sum+(rightmaxheight-height[i]);
else
sum=sum+(leftmaxheight-height[i]);
}
}
return sum;
}
每个格子的雨水数目算法:统计这个格子左边的最长格子数和右边最长格子数,如果两边格子数都比这个格子长度大,那么去两个最长格子数之中较小的一个,减去这个格子长度。
这样,就得到了一个格子的雨水数量。
时间复杂度O(n^2)
空间复杂度O(1)
我认为这道题还可以有更好的做法,比如动态规划,栈之类的,等研究出来再说。