一个位置是否能接雨水,取决于这个下标a的左右两侧,是否存在比a的高度更高的下标。所以找到当前元素a能存多少水,步骤分两步
1.找到每个元素(头尾元素不算)左侧高度最高的下标L。和每个元素右侧高度最高的下标R。
2.找L与R的高度的最小值,假设左边更低
3.nums[L]如果大于nums[a],可以存储水,容量等于L高度减去a高度。
class Solution { public int trap(int[] height) { int[] max_left=new int[height.length]; int[] max_right=new int[height.length]; int sum=0; for(int i=1;i<height.length-1;i++) { max_left[i]=Math.max(max_left[i-1],height[i-1]); } for(int i=height.length-2;i>=0;i--)// =0? { max_right[i]=Math.max(max_right[i+1],height[i+1]); } for(int i=1;i<height.length-1;i++) { int min=Math.min(max_left[i],max_right[i]); if(min>height[i]) { sum=sum+(min-height[i]); } } return sum; } }