题目:
分析:
决定做一道复杂题,呵呵,还是不会。我太菜,看完这个图,基本方法应该会了。
代码:
int main()
{
vector<int> h;
if(h.size()<=2) return 0;
vector<int> h1=h;//向左
vector<int> h2=h;//向右
//h1
for(int i=1;i<h1.size();i++)
{
int k=i-1;
while(1)
{
if(k==-1||h[k]>h[i]) break;
h1[k]=h[i];
k--;
}
}
//h2
for(int i=h1.size()-1;i>=0;i--)
{
int k=i+1;
while(1)
{
if(k==h1.size()||h[k]>h[i]) break;
h2[k]=h[i];
k++;
}
}
//c1 c2 表示最两边不为0 的下一个
int c1=0;
while(c1!=h1.size()-1)
{
if(h[c1]!=0) break;
c1++;
}
if(c1==h1.size()-1) return 0;
int c2=h1.size()-1;
while(c2!=0)
{
if(h[c2]!=0) break;
c2--;
}
if(c2==0) return 0;
if(c1+1>c2-1) return 0;
c1++;c2--;
int all=0;
for(int i=c1;i<=c2;i++)
{
all+=min(h1[i],h2[i])-h[i];
}
return all;
}