题目描述:
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
示例:
解题思路:
求每一列的和
使用数组存储每一列右边最高的墙–》从第一列非0的右一列开始从左往右计算每一列接的雨水进行求和。
代码附上:
class Solution {
public int trap(int[] height) {
int[] rigthmaxs=new int[height.length-1];
int i=0,leftmax=0,rigthmax=0,sum=0;
//每一列右边最高的墙
rigthmax=height[height.length-1];
for(i=height.length-2;i>=0;i--) {
if(height[i+1]>rigthmax) rigthmax=height[i+1];
rigthmaxs[i]=rigthmax;
}
i++;
//最左的墙
while(height[i]==0) {
i++;
if(i>height.length-1) return 0;
}
leftmax=height[i];
//计算每一列
for(int j=i+1;j<height.length-1;j++) {
if(leftmax<=rigthmaxs[j]) {
if(leftmax>height[j]) {
sum=sum+leftmax-height[j];
}
} else {
if(rigthmaxs[j]>height[j]) {
sum=sum+rigthmaxs[j]-height[j];
}
}
if(height[j]>leftmax) leftmax=height[j];
}
return sum;
}
}