题目描述:
给定 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;
}
}
该问题是一个计算几何题目,涉及数组操作和算法设计。给定一个非负整数数组表示柱子的高度,程序计算下雨后每列柱子能接的雨水量。首先找到每一列右边最高的墙,然后从左往右计算每一列的雨水,同时更新左右墙的高度,最终求和得到总雨水量。
281

被折叠的 条评论
为什么被折叠?



