本题可以通过先从一个方向遍历,同时记录遇到的最高柱(即最大数),使用这个数减去遍历到的数得到应该接到的雨水。累加这些数。当遇到的最后一块柱不是最高柱时,用最高柱的位置与数组长度的距离乘最高柱的高度。然后再反向遍历直到最高柱,遍历过程与之前相同,同时每次要加上柱高,因为之前减去的数包含了柱高。
class Solution { public int trap(int[] height) { int lenght = height.length; if(lenght<=1){ return 0; } int max = height[0]; int index = 0; int res = 0; for(int i=1;i<lenght;i++){ if(height[i]<max){ res = res + max - height[i]; }else if(height[i]>=max){ max = height[i]; index = i; } if(i==(lenght-1)&&index!=i){ res = res - max*(i-index); int maxj = 0; for(int j=lenght-1;j>index;j--){ if(height[j]<maxj){ res = res + maxj; }else if(height[j]>=maxj){ maxj = height[j]; res = res + maxj; } } } } return res; } }↵
