Files
leetcode/apps/docs/content/(01-linear-structures)/two-pointers/(problems)/42_trapping-rain-water.mdx
T

53 lines
1.5 KiB
Plaintext
Raw Normal View History

---
title: '42. Trapping Rain Water'
description: Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it can trap after raining
icon: dot
topics:
- { name: "Array", slug: "array" }
- { name: "Two Pointers", slug: "two-pointers" }
- { name: "Dynamic Programming", slug: "dynamic-programming" }
- { name: "Stack", slug: "stack" }
- { name: "Monotonic Stack", slug: "monotonic-stack" }
issue: "https://github.com/prdlk/leetcode/issues/211"
sidebar:
label: 'Trapping Rain Water'
badge: 'Hard'
---
### Example 1:
- Input: `height = [0,1,0,2,1,0,1,3,2,1,2,1]`
- Output: `6`
- Explanation: The above elevation map (black section) is represented by array `[0,1,0,2,1,0,1,3,2,1,2,1]`. In this case, `6` units of rain water (blue section) are being trapped.
### Example 2:
- Input: `height = [4,2,0,3,2,5]`
- Output: `9`
### Constraints:
- `n == height.length`
- `1 <= n <= 2 * 10^4`
- `0 <= height[i] <= 10^5`
## Solution
```py
class Solution:
def trap(self, height: list[int]) -> int:
left, right = 0, len(height) - 1
leftMax, rightMax = 0, 0
total = 0
while left < right:
leftMax = max(leftMax, height[left])
rightMax = max(rightMax, height[right])
if height[left] < height[right]:
total += leftMax - height[left]
left += 1
else:
total += rightMax - height[right]
right -= 1
return total
```