42 Trapping Rain Water

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:

• n == height.length
• 0 <= n <= 3 * 104
• 0 <= height[i] <= 105
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 func trap(height []int) int { n := len(height) left := 0 right := n - 1 res := 0 maxLeft := 0 maxRight := 0 for left <= right { if height[left] <= height[right] { if height[left] > maxLeft { maxLeft = height[left] } else { res += maxLeft - height[left] } left++ } else { if height[right] >= maxRight { maxRight = height[right] } else { res += maxRight - height[right] } right-- } } return res }