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

[leetcode] 42 Trapping Rain Water

2016-03-25 20:21 429 查看
具体思路就是先计算所有柱子的面积,然后先从左到右然后从右到左把坑填满,计算一个面积

用第二个面积减去第一个面积就是所求,注意各种细节。特殊情况单独讨论。

class Solution {
public:
int trap(vector<int>& height) {
//[0,1,0,2,1,0,1,3,2,1,2,1]
// 0  1 2 3 4 5 6 7 8 9 10
if(height.empty())
{
return 0;
}

int index=0;
int max = 0;
int maxunm=0;
int flag=0;
//寻找最大值的位置
for (int i = 0; i <height.size(); i++)
if (height[i] >= height[max])
{
max = i;
maxunm=height[max];
}
//柱子所占的面积
int pre=0;
for(int i=0;i<height.size();i++)
{
pre=pre+height[i];
}
if(maxunm==0)
{
return 0;
}
int sum=0;
if(height.size()<=2)
{
return 0;
}
for(int i=0,j=1;i<height.size()-2;i++,j++)
{
if(i<max)
{
if(height[i]>height[j])
{
height[j]=height[i];
flag=1;
}
else{
continue;
}
}
else
{
if(height[i]<height[j])
{
height[i]=height[j];
flag=1;
}
else{
continue;
}
}
}
for(int i=height.size()-2,j=height.size()-1;i>=0;i--,j--)
{
if(i<max)
{
if(height[i]>height[j])
{
height[j]=height[i];
flag=1;
}
else{
continue;
}
}
else
{
if(height[i]<height[j])
{
height[i]=height[j];
flag=1;
}
else{
continue;
}
}
}
for(int i=0;i<height.size();i++)
{
sum=sum+height[i];
}
//雨水的面积等于修改过后的面积减去之前柱子的面积
if(flag==1)
{
return sum-pre;
}
else
{
return 0;
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: