Bird
Raised Fist0
DSA Cprogramming~20 mins

Trapping Rain Water Using Stack in DSA C - 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 C code that calculates trapped rain water using a stack?
DSA C
int trap(int* height, int heightSize) {
    int stack[heightSize];
    int top = -1;
    int water = 0;
    int i = 0;
    while (i < heightSize) {
        while (top != -1 && height[i] > height[stack[top]]) {
            int topIndex = stack[top--];
            if (top == -1) break;
            int distance = i - stack[top] - 1;
            int bounded_height = (height[i] < height[stack[top]] ? height[i] : height[stack[top]]) - height[topIndex];
            water += distance * bounded_height;
        }
        stack[++top] = i++;
    }
    return water;
}

int main() {
    int height[] = {0,1,0,2,1,0,1,3,2,1,2,1};
    int size = sizeof(height)/sizeof(height[0]);
    int result = trap(height, size);
    printf("%d\n", result);
    return 0;
}
A7
B5
C6
D8
Attempts:
2 left
💡 Hint
Trace the stack operations and calculate trapped water between bars.
❓ Predict Output
intermediate
2:00remaining
Result of Trapping Rain Water for Different Input
What is the output of the trapping rain water function for this input array?
DSA C
int height[] = {4,2,0,3,2,5};
int size = sizeof(height)/sizeof(height[0]);
int result = trap(height, size);
printf("%d\n", result);
A9
B8
C7
D6
Attempts:
2 left
💡 Hint
Calculate trapped water between bars using stack logic.
🔧 Debug
advanced
2:00remaining
Identify the Error in Stack Implementation
What error will occur if the stack array is declared as int stack[heightSize-1] instead of int stack[heightSize] in the trapping rain water code?
DSA C
int stack[heightSize-1];
int top = -1;
// rest of the code unchanged
ANo error, code runs fine
BBuffer overflow when pushing last element
CStack underflow error during pop
DCompilation error due to invalid array size
Attempts:
2 left
💡 Hint
Consider the maximum number of elements pushed onto the stack.
🧠 Conceptual
advanced
2:00remaining
Why Use Stack for Trapping Rain Water?
Why is a stack used in the trapping rain water problem instead of a simple two-pointer approach?
AStack helps track previous bars to calculate bounded water efficiently
BStack reduces time complexity from O(n) to O(log n)
CStack automatically sorts the bars for easier calculation
DStack avoids the need to traverse the array multiple times
Attempts:
2 left
💡 Hint
Think about how the stack stores indices of bars and helps find boundaries.
🚀 Application
expert
3:00remaining
Maximum Water Trapped with Modified Input
Given the input array {5,2,1,2,1,5}, what is the maximum amount of water trapped calculated by the stack method?
A12
B15
C13
D14
Attempts:
2 left
💡 Hint
Visualize the bars and calculate trapped water between 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 reverse the order of the bars
B. To store the total amount of trapped water directly
C. To sort the heights of bars in ascending order
D. To keep track of bars that are not yet processed for water trapping

Solution

  1. Step 1: Understand stack role in the algorithm

    The stack stores indices of bars that are waiting to find a right boundary to trap water.
  2. Step 2: Clarify what the stack does not do

    The stack does not store water amounts 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 D
  4. Quick Check:

    Stack tracks bars for trapping water [OK]
Hint: Stack holds indices of bars waiting for right boundary [OK]
Common Mistakes:
  • Thinking stack stores water volume directly
  • Assuming stack sorts the bars
  • Believing stack reverses bar order
2. Which of the following C code snippets correctly declares a stack to store indices for trapping rain water?
easy
A. int stack[100]; int top = -1;
B. int stack; int top = 0;
C. int *stack = NULL; int top = 1;
D. int stack[] = {}; int top = -1;

Solution

  1. Step 1: Check stack declaration syntax

    int stack[100]; int top = -1; declares an integer array with fixed size and initializes top to -1, which is correct for stack implementation.
  2. Step 2: Identify incorrect declarations

    Options B, C, and D have wrong types or invalid initializations for stack and top pointer.
  3. Final Answer:

    int stack[100]; int top = -1; -> Option A
  4. Quick Check:

    Array + top = -1 is correct stack setup [OK]
Hint: Use array and top = -1 for empty stack [OK]
Common Mistakes:
  • Using uninitialized or wrong top value
  • Declaring stack as single int instead of array
  • Using empty array syntax invalid in C
3. What is the output of the following code snippet that calculates trapped rain water using stack?
int height[] = {0,1,0,2,1,0,1,3,2,1,2,1};
int n = 12;
// Assume correct trapping rain water stack code runs here
int trapped = trappingRainWater(height, n);
printf("%d\n", trapped);
medium
A. 5
B. 6
C. 4
D. 7

Solution

  1. Step 1: Understand the input heights

    The array represents bar heights where water can be trapped between taller bars.
  2. Step 2: Calculate trapped water manually or recall known result

    The known trapped water for this input is 6 units.
  3. Final Answer:

    6 -> Option B
  4. Quick Check:

    Standard example trapped water = 6 [OK]
Hint: Remember classic example traps 6 units water [OK]
Common Mistakes:
  • Miscounting trapped water units
  • Confusing indexes or heights
  • Assuming output is sum of heights
4. Identify the bug in this snippet of the trapping rain water stack algorithm:
while (top != -1 && height[i] > height[stack[top]]) {
  int topIndex = stack[top--];
  int distance = i - stack[top] - 1;
  int bounded_height = min(height[i], height[stack[top]]) - height[topIndex];
  water += distance * bounded_height;
}
medium
A. Using 'min' function without including its definition or header
B. Incorrect calculation of 'distance' by missing parentheses
C. Wrong decrement of 'top' causing stack underflow
D. Using 'water' variable without initialization

Solution

  1. Step 1: Check function usage

    The code uses 'min' function but C standard library does not have 'min' by default; it needs a macro or function definition.
  2. Step 2: Verify other parts

    Distance calculation and top decrement are correct; water variable usage depends on context but usually initialized.
  3. Final Answer:

    Using 'min' function without including its definition or header -> Option A
  4. Quick Check:

    min() undefined in C without custom code [OK]
Hint: Remember C needs custom min function or macro [OK]
Common Mistakes:
  • Assuming min() is built-in in C
  • Miscalculating distance with wrong parentheses
  • Forgetting to initialize water variable
5. Given the heights array {4, 2, 0, 3, 2, 5}, what is the total trapped rain water calculated using the stack method?
hard
A. 8
B. 7
C. 9
D. 6

Solution

  1. Step 1: Analyze the heights for trapped water

    Water trapped at each position i is max(0, min(left_max[i], right_max[i]) - height[i]), where left_max is tallest bar strictly to the left, right_max strictly to the right. Stack method yields same result.
  2. Step 2: Calculate trapped water step-by-step

    - i=1: min(4,5)-2 = 2
    - i=2: min(4,5)-0 = 4
    - i=3: min(4,5)-3 = 1
    - i=4: min(4,5)-2 = 2
    Total: 2+4+1+2 = 9 units.
  3. Final Answer:

    9 -> Option C
  4. Quick Check:

    Total trapped water = 9 [OK]
Hint: Sum water trapped between boundaries carefully [OK]
Common Mistakes:
  • Double counting trapped water
  • Ignoring zero height bars
  • Misidentifying 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