int trap(int* height, int heightSize){
if(heightSize<=2) return 0;
int left=0,right=heightSize-1;
int leftMax=height[0],rightMax=height[heightSize-1];
int ans=0;
while(left<=right){
//元素不重合,没有遍历玩
if(leftMax<rightMax){
//左小于右,从左走
if(height[left]<leftMax){
//当前高度小于两者最小,可装两者之差
ans+=leftMax-height[left];
}else{
//当前高度大于左高,将左高设为当前高度
leftMax=height[left];
}
//左数组元素自增
left++;
}
else{
//右小于左,从右走
if(height[right]<rightMax){
//当前高度小于右,可装两者之差
ans+=rightMax-height[right];
}else{
//当前高度大于右高,将右高设为当前高度
rightMax=height[right];
}
//右数组元素自增
right--;
}
}
return ans;
}
Last modification:December 9, 2022
© Allow specification reprint