跳转至

0042.接雨水

题目

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水

示例 1:

img

输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 

示例 2:

输入:height = [4,2,0,3,2,5]
输出:9

提示:

  • n == height.length
  • 1 <= n <= 2 * 10^4
  • 0 <= height[i] <= 10^5

题解

方法一:动态规划

方法二:单调栈

方法三:双指针

方法四: 求极值点

示例 1:

// 4,  2,  0,  3,  2,  5
//   -1, -1, +1, -1, +1
//     0, +2, -2,  +2

另一个例子:

//  4,   2,   0,   0,   3,   2,   5
//    -1,  -1,   0,  +1,  -1,  +1
//       0,  +1,  +1,  -2,  +2