Bird
Raised Fist0
DSA Typescriptprogramming~20 mins

Trapping Rain Water Problem in DSA Typescript - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Trapping Rain Water Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of trapping rain water calculation
What is the output of the following TypeScript code that calculates trapped rain water?
DSA Typescript
function trap(height: number[]): number {
  let left = 0, right = height.length - 1;
  let leftMax = 0, rightMax = 0;
  let water = 0;
  while (left < right) {
    if (height[left] < height[right]) {
      if (height[left] >= leftMax) leftMax = height[left];
      else water += leftMax - height[left];
      left++;
    } else {
      if (height[right] >= rightMax) rightMax = height[right];
      else water += rightMax - height[right];
      right--;
    }
  }
  return water;
}

console.log(trap([0,1,0,2,1,0,1,3,2,1,2,1]));
A6
B5
C7
D8
Attempts:
2 left
💡 Hint
Think about how water is trapped between bars by comparing left and right max heights.
🧠 Conceptual
intermediate
1:30remaining
Understanding the two-pointer approach
In the two-pointer approach to the Trapping Rain Water problem, why do we move the pointer with the smaller height inward?
ABecause the trapped water depends on the smaller side's max height, so moving the smaller pointer helps find trapped water correctly.
BBecause the larger height pointer always traps water, so it should stay fixed.
CBecause moving the larger height pointer first causes incorrect water calculation.
DBecause the pointers must always move towards the center in a fixed order.
Attempts:
2 left
💡 Hint
Think about which side limits the water trapped at each step.
🔧 Debug
advanced
2:00remaining
Identify the error in this trapping rain water code
What error does the following TypeScript code produce when run?
DSA Typescript
function trap(height: number[]): number {
  let left = 0, right = height.length - 1;
  let leftMax = 0, rightMax = 0;
  let water = 0;
  while (left <= right) {
    if (height[left] < height[right]) {
      if (height[left] > leftMax) leftMax = height[left];
      else water += leftMax - height[left];
      left++;
    } else {
      if (height[right] > rightMax) rightMax = height[right];
      else water += rightMax - height[right];
      right--;
    }
  }
  return water;
}

console.log(trap([4,2,0,3,2,5]));
AInfinite loop because pointers never cross
BOutput is 8, which is incorrect
CNo error, output is 9
DRuntime error due to negative index access
Attempts:
2 left
💡 Hint
Check the loop condition carefully and how pointers move.
❓ Predict Output
advanced
2:00remaining
Output of prefix and suffix max arrays method
What is the output of this TypeScript code using prefix and suffix max arrays to calculate trapped rain water?
DSA Typescript
function trap(height: number[]): number {
  const n = height.length;
  const leftMax = new Array(n).fill(0);
  const rightMax = new Array(n).fill(0);
  let water = 0;

  leftMax[0] = height[0];
  for (let i = 1; i < n; i++) {
    leftMax[i] = Math.max(leftMax[i - 1], height[i]);
  }

  rightMax[n - 1] = height[n - 1];
  for (let i = n - 2; i >= 0; i--) {
    rightMax[i] = Math.max(rightMax[i + 1], height[i]);
  }

  for (let i = 0; i < n; i++) {
    water += Math.min(leftMax[i], rightMax[i]) - height[i];
  }

  return water;
}

console.log(trap([3,0,2,0,4]));
A6
B7
C5
D8
Attempts:
2 left
💡 Hint
Calculate max heights from left and right, then sum trapped water at each index.
🚀 Application
expert
2:30remaining
Maximum trapped water between two bars
Given an array representing heights of bars, which approach efficiently finds the maximum amount of water trapped between any two bars (not necessarily adjacent)?
AUse a stack to find the next greater element for each bar and calculate trapped water accordingly.
BCalculate trapped water at each index using prefix and suffix max arrays and sum all values.
CSort the array and pick the two largest bars to calculate trapped water.
DUse two pointers from both ends, move the pointer with smaller height inward, and calculate max area at each step.
Attempts:
2 left
💡 Hint
Think about the container with most water problem approach.

Practice

(1/5)
1. What does the Trapping Rain Water problem ask you to find given an array of heights?
easy
A. The total amount of water that can be trapped between the bars after raining
B. The maximum height of the bars in the array
C. The number of bars that are taller than their neighbors
D. The minimum height of the bars in the array

Solution

  1. Step 1: Understand the problem context

    The problem gives an array representing heights of bars and asks about water trapped between them.
  2. Step 2: Identify what is being calculated

    We calculate how much water can be held between bars after it rains, not just heights or counts.
  3. Final Answer:

    The total amount of water that can be trapped between the bars after raining -> Option A
  4. Quick Check:

    Trapping Rain Water = Total trapped water [OK]
Hint: Focus on trapped water volume, not bar heights [OK]
Common Mistakes:
  • Confusing trapped water with max height
  • Counting bars taller than neighbors
  • Looking for minimum height instead of trapped water
2. Which of the following TypeScript function signatures correctly represents a function to solve the Trapping Rain Water problem?
easy
A. function trap(height: number): number[]
B. function trap(height: number[]): number
C. function trap(height: string): string
D. function trap(height: boolean[]): boolean

Solution

  1. Step 1: Analyze the input and output types

    The input is an array of numbers (heights), output is a single number (total trapped water).
  2. Step 2: Match the function signature

    Only function trap(height: number[]): number matches input as number array and output as number.
  3. Final Answer:

    function trap(height: number[]): number -> Option B
  4. Quick Check:

    Input array, output number [OK]
Hint: Input is number array, output is number [OK]
Common Mistakes:
  • Using wrong input type like string or boolean
  • Returning array instead of number
  • Mismatching input and output types
3. What is the output of the following TypeScript code?
function trap(height: number[]): number {
  let left = 0, right = height.length - 1;
  let leftMax = 0, rightMax = 0;
  let water = 0;
  while (left < right) {
    if (height[left] < height[right]) {
      height[left] >= leftMax ? (leftMax = height[left]) : water += leftMax - height[left];
      left++;
    } else {
      height[right] >= rightMax ? (rightMax = height[right]) : water += rightMax - height[right];
      right--;
    }
  }
  return water;
}

console.log(trap([0,1,0,2,1,0,1,3,2,1,2,1]));
medium
A. 6
B. 5
C. 4
D. 7

Solution

  1. Step 1: Understand the two-pointer approach

    We use left and right pointers, track max heights, and accumulate trapped water between bars.
  2. Step 2: Trace the code with given input

    For input [0,1,0,2,1,0,1,3,2,1,2,1], the trapped water calculated is 6 units.
  3. Final Answer:

    6 -> Option A
  4. Quick Check:

    Two-pointer trap water = 6 [OK]
Hint: Use two-pointer method to calculate trapped water [OK]
Common Mistakes:
  • Miscounting trapped water units
  • Confusing leftMax and rightMax updates
  • Incorrect pointer movement
4. Identify the bug in this TypeScript code snippet for the Trapping Rain Water problem:
function trap(height: number[]): number {
  let left = 0, right = height.length - 1;
  let leftMax = 0, rightMax = 0;
  let water = 0;
  while (left <= right) {
    if (height[left] < height[right]) {
      if (height[left] > leftMax) leftMax = height[left];
      else water += leftMax - height[left];
      left++;
    } else {
      if (height[right] > rightMax) rightMax = height[right];
      else water += rightMax - height[right];
      right--;
    }
  }
  return water;
}
medium
A. The leftMax and rightMax variables are not initialized correctly
B. The water accumulation logic is incorrect
C. The while loop condition should be 'left < right' instead of 'left <= right'
D. The pointers left and right are not updated inside the loop

Solution

  1. Step 1: Check loop boundary conditions

    The loop uses 'left <= right' which causes double counting when left equals right.
  2. Step 2: Correct the loop condition

    Changing to 'left < right' prevents overlap and ensures correct water calculation.
  3. Final Answer:

    The while loop condition should be 'left < right' instead of 'left <= right' -> Option C
  4. Quick Check:

    Loop boundary fix = correct water count [OK]
Hint: Use strict less than in loop to avoid double counting [OK]
Common Mistakes:
  • Using <= instead of < in while loop
  • Not updating pointers inside loop
  • Incorrect water calculation logic
5. Given the heights array [4,2,0,3,2,5], what is the total trapped rain water? Use the two-pointer approach to solve.
hard
A. 8
B. 7
C. 6
D. 9

Solution

  1. Step 1: Initialize pointers and max heights

    left=0, right=5, leftMax=0, rightMax=0, water=0.
  2. Step 2: Move pointers and calculate trapped water

    Iterate:
    - left=0 (height=4) > leftMax=0, update leftMax=4, left++
    - left=1 (height=2) < leftMax=4, water += 4-2=2, left++
    - left=2 (height=0) < leftMax=4, water += 4-0=4, left++
    - left=3 (height=3) < leftMax=4, water += 4-3=1, left++
    - left=4 (height=2) < leftMax=4, water += 4-2=2, left++
    Now left=5 equals right=5, stop.
  3. Step 3: Sum trapped water

    Total water = 2+4+1+2 = 9 units.
  4. Final Answer:

    9 -> Option D
  5. Quick Check:

    Two-pointer trapped water = 9 [OK]
Hint: Calculate trapped water stepwise from both ends [OK]
Common Mistakes:
  • Only calculating from one side
  • Forgetting to update max heights
  • Stopping loop too early
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard