解题思路
统计每个柱子的左侧和右侧最高柱子高度,积水量等于左右最高柱子较小的那个减去当前柱子高度
参考代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| class Solution { public int trap(int[] height) { int n = height.length;
int[] leftMax = new int[n]; leftMax[0] = height[0]; for(int i = 1; i < n; i ++) { leftMax[i] = Math.max(leftMax[i - 1], height[i]); }
int[] rightMax = new int[n]; rightMax[n - 1] = height[n - 1]; for(int i = n - 2; i >= 0; i --) { rightMax[i] = Math.max(height[i], rightMax[i + 1]); }
int res = 0; for(int i = 1; i < n - 1; i ++) { if(height[i] >= leftMax[i - 1] || height[i] >= rightMax[i + 1]) { continue; } else { res += Math.min(leftMax[i - 1], rightMax[i + 1]) - height[i]; } } return res; } }
|