给定 n
个非负整数表示每个宽度为 1
的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
代码如下
class Solution {
public int trap(int[] height) {
int left=0;
int leftmax=0;
int rightmax=0;
int right=height.length-1;
int ans=0;
while(left<right){
if(height[left]<height[right]){
if(height[left]>leftmax){
leftmax=height[left];
}else{
ans+=leftmax-height[left];
}
left++;
}else{
if(height[right]>rightmax){
rightmax=height[right];
}else{
ans+=rightmax-height[right];
}
right--;
}
}
return ans;
}
}
思路参考力扣官方题解。
首先从左面开始,假设右面高墙存在,则依次进行雨水累积,若遇到比右侧高墙还高的位置,则假设此强为从右开始遍历的左高墙位置,从右开始积累雨水,直到两指针相遇即可