class Solution {
public:
int trap(vector<int>& height) {//读入数组
int len=height.size();//读出长度
int max=-1,mxid1=-1,mxid2=-1,ans=0;//最大值第一次出现位置,最后一次出现位置,答案累加
for(int i=0;i<len;i++){//先扫一次找到最大值及其首末出现的位置
if(height[i]>max){//如果最大值可以更新
max=height[i];//更新最大值
mxid1=i;//第一次出现位置
mxid2=i;//最后一次出现位置
}
if(height[i]==max)mxid2=i;//如果最大值已出现过,那就更新最后一次出现的位置
}
int tpmx=-1;//当前扫到的临时最大值
for(int i=0;i<mxid1;i++){//从左扫到第一次出现最大值的位置
tpmx=tpmx>height[i]?tpmx:height[i];
ans+=tpmx-height[i];//求出当前位与最最大值之间的差,累加到答案
}
for(int i=mxid1+1;i<mxid2;i++){//最大值出现的首末位置中间部分
ans+=max-height[i]; //答案累加
}
tpmx=-1;//当前扫到的临时最大值
for(int i=len-1;i>mxid2;i--){//从最后往前扫到最后一次出现最大值的位置
tpmx=tpmx>height[i]?tpmx:height[i];//更新最大值
ans+=tpmx-height[i];//求出当前位与最最大值之间的差,累加到答案
}
return ans;
}
};