【LeetCode练习】[困难]42. 接雨水
42. 接雨水
算法思想:dp
题目:
java代码
class Solution {
public int trap(int[] height) {
int len = height.length;
if(len < 2){//无法接雨水,直接返回0
return 0;
}
int[] left = new int[len];//记录i左边柱子最大的高度
int[] right = new int[len];//记录i右边柱子最大高度
left[0] = height[0];
right[len-1] = height[len-1];
for (int i = 1; i < len; i++){//分别统计i左边和右边的最大高度
left[i] = Math.max(left[i-1],height[i]);
right[len-1-i] = Math.max(right[len-i],height[len-1-i]);
}
int area = 0;//雨水量
for(int i = 0; i < len; i++){
//左边和右边最矮的柱子*长度1-当前柱子的高度
area += Math.min(left[i],right[i])-height[i];
}
return area;
}
}