42. 接雨水
接雨水这道题目是 面试中特别高频的一道题,也是单调栈应用的题目,大家好好做做。
建议是掌握 双指针 和单调栈,因为在面试中 写出单调栈可能 有点难度,但双指针思路更直接一些。在时间紧张的情况有,能写出双指针法也是不错的,然后可以和面试官在慢慢讨论如何优化。
代码随想录
方法1:双指针法
java">class Solution {public int trap(int[] height) {int[] leftHight = new int[height.length];//记录包含自身在内,每个柱子左边柱子最大高度leftHight[0] = height[0];for(int i = 1; i < height.length; i++){leftHight[i] = Math.max(height[i], leftHight[i-1]);}int[] rightHight = new int[height.length];//记录包含自身在内,每个柱子右边柱子最大高度rightHight[height.length-1] = height[height.length-1];for(int i = height.length-2; i >= 0; i--){rightHight[i] = Math.max(height[i], rightHight[i+1]);}int sum = 0;for(int i = 1; i < height.length; i++){sum += Math.min(leftHight[i], rightHight[i]) - height[i];}return sum; }
}
方法2:单调栈方法