42. Trapping Rain Water

https://leetcode.com/problems/trapping-rain-water/

solution

  • 双指针/DP

# 纵向按列计算,每一列计算
class Solution:
    def trap(self, height: List[int]) -> int:
        max_left = [height[0]] * len(height)
        for i in range(1, len(height)):
            max_left[i] = max(max_left[i-1], height[i])

        max_right = [height[-1]] * len(height)
        for i in range(len(height)-2, -1, -1):
            max_right[i] = max(max_right[i+1], height[i])

        res = 0
        for i in range(len(height)):
            res += min(max_right[i], max_left[i]) - height[i]
        return res

时间复杂度:O(n) 空间复杂度:O(n)

  • 单调栈

follow up

407. Trapping Rain Water II

Last updated