leetcode-array
42. 接雨水
题解:
按列求解,计算每列积水数量时,只需要将当前列墙的高度和左右最高墙的较低者比较。
使用动态规划计算出每列左右两边最高的墙。
class Solution {
public int trap(int[] height) {
if (height==null||height.length==0)return 0;
int res = 0;
//左边最高的墙
int[] leftMax = new int[height.length];
//右边最高的墙
int[] rightMax = new int[height.length];
leftMax[0] = height[0];
rightMax[height.length-1] = height[height.length-1];
for (int i = 1; i < height.length-1; i++) {
leftMax[i] = Math.max(leftMax[i-1],height[i]);
}
for (int i = height.length-2; i >=0; i--) {
rightMax[i] = Math.max(rightMax[i+1],height[i]);
}
for (int i = 1; i < height.length-1; i++) {
int min = Math.min(leftMax[i],rightMax[i]);
if (min>height[i])res+=min-height[i];
}
return res;
}
}