2.思路很简单,左边最大柱子和右边最大柱子的最小值减当前高度就行了
class Solution {
public:
int trap(vector<int>& height) {
int sum=0;
for(int i=0;i<height.size();i++)
{
if(i==0||i==height.size()-1)
{
continue;
}
int lm=0;
int rm=0;
for(int j=0;j<i;j++)
{
if(height[j]>lm)
{
lm=height[j];
}
}
for(int k=height.size()-1;k>i;k--)
{
if(height[k]>rm)
{
rm=height[k];
}
}
int h=min(rm,lm)-height[i];
if(h>0)
{
sum+=h;
}
}
return sum;
}
};
结果......
这下就要使用程序优化的方法了,用变量记录每一次改变的值,采用动态规划的方法优化程序
class Solution {
public:
int trap(vector<int>& height) {
int sum=0;
vector<int>l(height.size(),0);
vector<int>r(height.size(),0);
l[0]=height[0];
for(int i=1;i<height.size();i++)
{
l[i]=(max(height[i],l[i-1]));
}
r[height.size()-1]=height[height.size()-1];
for(int i=height.size()-2;i>0;i--)
{
r[i]=(max(height[i],r[i+1]));
}
for(int i=0;i<height.size();i++)
{
if(i==0||i==height.size()-1)
{
continue;
}
int h=min(l[i-1],r[i+1])-height[i];
if(h>0)
{
sum+=h;
}
}
return sum;
}
};