mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 13:12:44 +00:00
68 lines
2.3 KiB
Plaintext
68 lines
2.3 KiB
Plaintext
---
|
|
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"
|
|
companies:
|
|
- { name: "Ola Cabs", period: "Thirty Days", frequency: 90.7 }
|
|
- { name: "Amazon", period: "Thirty Days", frequency: 80.7 }
|
|
- { name: "Goldman Sachs", period: "Thirty Days", frequency: 71.7 }
|
|
- { name: "Bloomberg", period: "Thirty Days", frequency: 69.8 }
|
|
- { name: "Infosys", period: "Thirty Days", frequency: 68.6 }
|
|
- { name: "Google", period: "Thirty Days", frequency: 63.7 }
|
|
- { name: "Snowflake", period: "Three Months", frequency: 90.3 }
|
|
- { name: "Meta", period: "Three Months", frequency: 58.9 }
|
|
- { name: "Microsoft", period: "Three Months", frequency: 57.2 }
|
|
- { name: "tcs", period: "Three Months", frequency: 47.7 }
|
|
- { name: "Docusign", period: "Six Months", frequency: 100 }
|
|
- { name: "Qualcomm", period: "Six Months", frequency: 80.7 }
|
|
- { name: "Nvidia", period: "Six Months", frequency: 78.7 }
|
|
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
|
|
```
|