LC 42. Trapping Rain Water

Alen Alex · February 3, 2024

LeetCode Link: 42. Trapping Rain Water
Language: C#

Problem Statement

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.

Examples

Example 1:

Img1
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 * 104
  • 0 <= height[i] <= 105

Solution

public class Solution 
{
    public int Trap(int[] height) 
    {
        var ml = new int[height.Length];
        var mr = new int[height.Length];
        var maxl = 0;
        var maxr = 0;
        var q = 0;

        for (int i=0; i<height.Length; i++)
        {
            maxl = Math.Max(height[i], maxl);
            maxr = Math.Max(height[height.Length - i - 1], maxr);
            ml[i] = maxl;
            mr[height.Length - i - 1] = maxr;            
        }

        for (int i=0; i<height.Length; i++)
        {
            var hold = Math.Min(ml[i], mr[i]) - height[i];
            q += hold < 0 ? 0 : hold;
        }

        return q;        
    }
}

Complexity

Time Complexity: O(N)
Space Complexity: O(N)

Twitter, Facebook