力扣解题汇总(困难)
文章目录
- 技巧
- 42_接雨水
技巧
42_接雨水
class Solution {public int trap(int[] height) {int LMax = 0, RMax = 0;int len = height.length;int[] L2R = new int[len];int[] R2L = new int[len];//计数每一个格的左右边最高柱for (int i = 0; i < len; i++) {LMax = Math.max(LMax, height[i]);L2R[i] = LMax;RMax = Math.max(RMax, height[len - 1 - i]);R2L[len - 1 - i] = RMax;}int countWater = 0;for (int i = 0; i < len; i++) {//当前格能接多少雨水由左边最高柱子和右边最高柱子中矮的决定,//然后再看当前格的柱子占了多少空间,还剩多少空间供雨水存//如果是负数就是存不了int currentCountWater = Math.min(L2R[i], R2L[i]) - height[i];if (currentCountWater > 0) {countWater += currentCountWater;}}return countWater;}
}