LeetCode-in-TypeScript.github.io

42. Trapping Rain Water

Hard

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.

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:

Solution

function trap(height: number[]): number {
    let result = 0
    let left = 1
    let right = height.length - 2
    let leftMax = height[left - 1]
    let rightMax = height[right + 1]
    while (left <= right) {
        if (leftMax < rightMax) {
            leftMax = Math.max(leftMax, height[left])
            result += leftMax - height[left]
            left++
        } else {
            rightMax = Math.max(rightMax, height[right])
            result += rightMax - height[right]
            right--
        }
    }
    return result
}

export { trap }