首先先找到第一个height[i]>height[i+1]的点 然后先往后寻找大于等于height[i]的位置,如果没有,寻找大于height[i+1]的最大点
int trap(std::vector<int>& height) {
if(height.size()<=2)
return 0;
int i=0;
int sum=0;
int c=0;
int max=0;
int c1=-1;
while(i<height.size()-2){
max=0;
c1=-1;
if(height[i]>height[i+1]){
c=0;
int j=i+1;
for(;j<height.size();j++){
if(height[j]>=height[i])
{
int d=height[i];
sum+=d*(j-i-1)-c;
i=j;
break;
}
c+=height[j];
}
if(j==height.size())
{
c=0;
int k=i+2;
for(;k<height.size();k++){
if(height[k]>height[i+1])
{
if(height[k]>max){
max=height[k];
c1=k;
}
}
}
if(c1!=-1)
{
int d=height[i]<height[c1]?height[i]:height[c1];
for(int t=i+1;t<c1;t++){
c+=height[t];
}
sum+=d*(c1-i-1)-c;
i=c1;
}else
i++;
}
}else
i++;
}
return sum;
}