42. 接雨水
1. 题目
给定 n
个非负整数表示每个宽度为 1
的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
示例 1:
1 | 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] |
示例 2:
1 | 输入:height = [4,2,0,3,2,5] |
提示:
n == height.length
1 <= n <= 2 * 104
0 <= height[i] <= 105
2. 思路
初始化
L
数组与R
数组,并初始化lMax
变量与rMax
变量L数组: 从左往右遍历存储与左侧最大值
lMax
与当前值的差值R数组: 从右往左遍历存储与右侧最大值
rMax
与当前值的差值lMax变量: 当遍历生成
L
数组的同时,实时更新该变量为最大值rMax变量: 当遍历生成
R
数组的同时,实时更新该变量为最大值
在完成上述
L
数组和R
数组的计算后,使用变量count
遍历累加获取Math.min(L[i], R[i]) - height[i]
值得到答案,如下图
3. 代码
1 | class Solution { |
4. 复杂度
- 时间复杂度:
O(n)
- 空间复杂度:
O(n)