接雨水
题目描述
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,
下雨之后能接多少雨水。
1 | 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] |
解题思路
- 暴力解法。唯有山谷可以接住雨水,接住雨水的大小等于左右两边的山峰(left、right)
更低的一边,与谷底(当前值)的差值,依次累加 - 双指针优化。解法1也是双指针,但是有重复的取left、right最大值,优化思路,
使用数组保存当前值的left、right最大值。 - 栈思路。栈保存数组索引,栈头表示当前值,栈头第二个表示left左侧,需要比较的为right
代码
暴力解法
1 | public static int trap(int[] height) { |
双指针优化
1 | public static int trap2(int[] height) { |
栈思路
1 | public static int trap3(int[] height) { |