目录
一、接雨水 I
leetcode.42 链接:https://leetcode.cn/problems/trapping-rain-water/
难度:hard
这里介绍了两种方法:动态规划(时间和空间复杂度都为O(n)),双指针(时间复杂度O(n),空间复杂度O(1))。
1、动态规划
时间复杂度:O(n)
空间复杂度:O(n)
(1)算法原理
- 首先,维护两个数组:
leftMax:第i个元素表示第i个柱子及左边位置中,height的最大高度。
rightMax:第i个元素表示第i个柱子及右边位置中,height的最大高度。 - 数组的初始化:
- 数组的更新规则:
当时,
当时, - 于是,每个柱子接雨水的数量等于:
官方解法的图片,很清楚地解释了雨水数量计算的原因:
(2)Python实现
class Solution(object):
def trap(self, height):
"""
:type height: List[int]
:rtype: int
"""
# 动态