classSolution{publicinttrap(int[] height){
Stack<Integer> stack =newStack<>();int res =0;for(int i=0; i<height.length; i++){while(!stack.isEmpty()&& height[stack.peek()]< height[i]){int cur = stack.pop();if(stack.isEmpty())break;int l = stack.peek();int r = i;int h = Math.min(height[l], height[r])- height[cur];
res +=(r-l-1)*h;}
stack.push(i);}return res;}}
方法一:遍历每一列,然后求该列两边的最高的柱子高度,那么该列能存放的雨水量为两边柱子高度较低的一个柱子和当前列的高度差。可以使用动态规划来优化求某一列的两边最高的柱子高度的过程,使用dp数组来保存,可以避免每次都重新遍历整个数组。class Solution { public int trap(int[] height) { int sum = 0; ...