Bird
Raised Fist0
DSA Pythonprogramming~20 mins

Trapping Rain Water Using Stack in DSA Python - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Stack 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 Python code that calculates trapped rain water using a stack?
DSA Python
def trap(height):
    stack = []
    water = 0
    for i, h in enumerate(height):
        while stack and height[stack[-1]] < h:
            top = stack.pop()
            if not stack:
                break
            distance = i - stack[-1] - 1
            bounded_height = min(height[stack[-1]], h) - height[top]
            water += distance * bounded_height
        stack.append(i)
    return water

print(trap([0,1,0,2,1,0,1,3,2,1,2,1]))
A6
B5
C8
D7
Attempts:
2 left
💡 Hint
Think about how the stack helps find boundaries to trap water between bars.
🧠 Conceptual
intermediate
1:30remaining
Understanding Stack Usage in Trapping Rain Water
Why do we use a stack in the trapping rain water problem?
ATo sort the bars by height
BTo store the amount of water trapped at each index
CTo keep track of indices of bars that are not yet bounded by a higher bar on the right
DTo reverse the order of the bars
Attempts:
2 left
💡 Hint
Think about how the stack helps find boundaries for trapping water.
🔧 Debug
advanced
2:00remaining
Identify the Error in Trapping Rain Water Code
What error will this code raise when executed?
DSA Python
def trap(height):
    stack = []
    water = 0
    for i, h in enumerate(height):
        while stack and height[stack[-1]] <= h:
            top = stack.pop()
            if not stack:
                break
            distance = i - stack[-1] - 1
            bounded_height = min(height[stack[-1]], h) - height[top]
            water += distance * bounded_height
        stack.append(i)
    return water

print(trap([4,2,0,3,2,5]))
AInfinite loop
BIndexError due to empty stack access
CTypeError due to invalid operation
DNo error, output is 9
Attempts:
2 left
💡 Hint
Check the condition in the while loop carefully.
❓ Predict Output
advanced
2:00remaining
Output of Modified Trapping Rain Water Code
What is the output of this modified trapping rain water code?
DSA Python
def trap(height):
    stack = []
    water = 0
    for i, h in enumerate(height):
        while stack and height[stack[-1]] < h:
            top = stack.pop()
            if not stack:
                break
            distance = i - stack[-1] - 1
            bounded_height = min(height[stack[-1]], h) - height[top]
            if bounded_height > 0:
                water += distance * bounded_height
        stack.append(i)
    return water

print(trap([4,2,0,3,2,5]))
A10
B9
C8
D7
Attempts:
2 left
💡 Hint
The added check prevents adding negative water amounts.
🚀 Application
expert
3:00remaining
Maximum Water Trapped in Large Histogram
Given a histogram with heights [5,2,1,2,1,5,3,2,4,1], what is the maximum amount of water trapped using the stack method?
A14
B15
C13
D12
Attempts:
2 left
💡 Hint
Visualize the bars and trapped water between the highest boundaries.

Practice

(1/5)
1. What is the main purpose of using a stack in the Trapping Rain Water Using Stack algorithm?
easy
A. To store the total amount of trapped water
B. To sort the heights of bars in ascending order
C. To keep track of bars that are not yet processed for water trapping
D. To reverse the order of the height array

Solution

  1. Step 1: Understand the role of the stack

    The stack stores indices of bars that are waiting to find a right boundary to trap water.
  2. Step 2: Why not other options?

    The stack does not store water amount or sort bars; it helps find boundaries for trapped water.
  3. Final Answer:

    To keep track of bars that are not yet processed for water trapping -> Option C
  4. Quick Check:

    Stack tracks bars for trapping water = B [OK]
Hint: Stack holds bars waiting for right boundary [OK]
Common Mistakes:
  • Thinking stack stores water amount
  • Assuming stack sorts the bars
  • Believing stack reverses the array
2. Which of the following Python code snippets correctly initializes an empty stack for the trapping rain water algorithm?
easy
A. stack = 0
B. stack = {}
C. stack = None
D. stack = []

Solution

  1. Step 1: Identify correct stack initialization

    In Python, a stack is commonly represented by a list, so stack = [] initializes an empty stack.
  2. Step 2: Why other options are wrong

    {} is a dictionary, None is no value, and 0 is an integer, none suitable for stack operations.
  3. Final Answer:

    stack = [] -> Option D
  4. Quick Check:

    Empty list for stack = A [OK]
Hint: Use empty list [] to create stack in Python [OK]
Common Mistakes:
  • Using {} which creates a dictionary
  • Assigning None instead of list
  • Using integer 0 as stack
3. What is the output of the following code snippet that uses stack to calculate trapped rain water?
def trap(height):
    stack = []
    water = 0
    for i, h in enumerate(height):
        while stack and height[stack[-1]] < h:
            top = stack.pop()
            if not stack:
                break
            distance = i - stack[-1] - 1
            bounded_height = min(height[stack[-1]], h) - height[top]
            water += distance * bounded_height
        stack.append(i)
    return water

print(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: Trace the algorithm with given heights

    The code calculates trapped water for heights [0,1,0,2,1,0,1,3,2,1,2,1]. The total trapped water is 6 units.
  2. Step 2: Confirm calculation matches known example

    This is a classic example where trapped water is 6, matching the output of the code.
  3. Final Answer:

    6 -> Option A
  4. Quick Check:

    Trapped water = 6 [OK]
Hint: Classic example trap water = 6 units [OK]
Common Mistakes:
  • Miscounting trapped water units
  • Ignoring stack pop conditions
  • Wrong distance or bounded height calculation
4. Identify the error in the following code snippet for trapping rain water using stack:
def trap(height):
    stack = []
    water = 0
    for i, h in enumerate(height):
        while stack and height[stack[-1]] <= h:
            top = stack.pop()
            if not stack:
                break
            distance = i - stack[-1] - 1
            bounded_height = min(height[stack[-1]], h) - height[top]
            water += distance * bounded_height
        stack.append(i)
    return water

print(trap([4,2,0,3,2,5]))
medium
A. The distance calculation is incorrect
B. The condition should be < instead of <=
C. The stack should be a queue
D. The water variable should be initialized to 1

Solution

  1. Step 1: Check the while loop condition

    The condition height[stack[-1]] <= h causes popping even when heights are equal, which is incorrect for trapping water calculation.
  2. Step 2: Correct condition and reason

    It should be height[stack[-1]] < h to pop only when current height is strictly greater, ensuring correct water trapping.
  3. Final Answer:

    The condition should be < instead of <= -> Option B
  4. Quick Check:

    Use < not <= in while condition [OK]
Hint: Use strict less than < in stack pop condition [OK]
Common Mistakes:
  • Using <= causes wrong popping
  • Confusing stack with queue
  • Incorrect distance formula
  • Initializing water to 1 instead of 0
5. Given the height array [3, 0, 2, 0, 4], what is the total trapped rain water calculated using the stack method? Explain how the stack helps in this calculation.
hard
A. 4
B. 7
C. 5
D. 6

Solution

  1. Step 1: Calculate trapped water step-by-step

    Heights: [3,0,2,0,4]. Water trapped at position 1 is 3 units, at position 2 is 0 units, at position 3 is 1 unit. Total trapped water = 4 units.
  2. Step 2: Explain stack role in calculation

    The stack stores indices of bars. When a higher bar is found, it pops lower bars and calculates trapped water using distance and bounded height between bars.
  3. Final Answer:

    4 -> Option A
  4. Quick Check:

    Stack helps find boundaries; trapped water = 4 [OK]
Hint: Stack finds left/right boundaries to calculate trapped water [OK]
Common Mistakes:
  • Adding trapped water incorrectly
  • Ignoring zero height bars
  • Not using stack to find boundaries
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