Bird
Raised Fist0
DSA Rustprogramming~20 mins

Largest Rectangle in Histogram Using Stack in DSA Rust - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Histogram Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Largest Rectangle Calculation
What is the output of the following Rust code that calculates the largest rectangle area in a histogram using a stack?
DSA Rust
fn largest_rectangle_area(heights: Vec<i32>) -> i32 {
    let mut stack = Vec::new();
    let mut max_area = 0;
    let mut i = 0;
    while i < heights.len() {
        if stack.is_empty() || heights[i] >= heights[*stack.last().unwrap()] {
            stack.push(i);
            i += 1;
        } else {
            let top = stack.pop().unwrap();
            let width = if stack.is_empty() { i as i32 } else { (i - stack.last().unwrap() - 1) as i32 };
            let area = heights[top] * width;
            if area > max_area {
                max_area = area;
            }
        }
    }
    while !stack.is_empty() {
        let top = stack.pop().unwrap();
        let width = if stack.is_empty() { i as i32 } else { (i - stack.last().unwrap() - 1) as i32 };
        let area = heights[top] * width;
        if area > max_area {
            max_area = area;
        }
    }
    max_area
}

fn main() {
    let histogram = vec![2, 1, 5, 6, 2, 3];
    println!("{}", largest_rectangle_area(histogram));
}
A6
B12
C8
D10
Attempts:
2 left
💡 Hint
Think about the largest rectangle that can be formed by consecutive bars in the histogram.
🧠 Conceptual
intermediate
1:30remaining
Understanding Stack Usage in Histogram Problem
Why do we use a stack to solve the Largest Rectangle in Histogram problem efficiently?
ATo keep track of indices of bars in increasing height order for quick area calculation
BTo count the total number of bars in the histogram
CTo reverse the histogram for easier traversal
DTo store the heights of bars in sorted order
Attempts:
2 left
💡 Hint
Think about how the stack helps find the width of rectangles quickly.
🔧 Debug
advanced
2:00remaining
Identify the Error in Stack-Based Histogram Code
What error will the following Rust code produce when run?
DSA Rust
fn largest_rectangle_area(heights: Vec<i32>) -> i32 {
    let mut stack = Vec::new();
    let mut max_area = 0;
    let mut i = 0;
    while i <= heights.len() {
        let current_height = if i == heights.len() { 0 } else { heights[i] };
        if stack.is_empty() || current_height >= heights[*stack.last().unwrap()] {
            stack.push(i);
            i += 1;
        } else {
            let top = stack.pop().unwrap();
            let width = if stack.is_empty() { i as i32 } else { (i - stack.last().unwrap() - 1) as i32 };
            let area = heights[top] * width;
            if area > max_area {
                max_area = area;
            }
        }
    }
    max_area
}

fn main() {
    let histogram = vec![2, 1, 5, 6, 2, 3];
    println!("{}", largest_rectangle_area(histogram));
}
ANo error, outputs 10 correctly
BStack underflow panic when popping from empty stack
CIndex out of bounds panic at heights[i]
DInfinite loop due to i never incrementing
Attempts:
2 left
💡 Hint
Check how the code handles the iteration beyond the last index.
❓ Predict Output
advanced
2:00remaining
Output of Modified Histogram with Equal Heights
What is the output of the Rust code calculating largest rectangle area for histogram [2, 2, 2, 2]?
DSA Rust
fn largest_rectangle_area(heights: Vec<i32>) -> i32 {
    let mut stack = Vec::new();
    let mut max_area = 0;
    let mut i = 0;
    while i < heights.len() {
        if stack.is_empty() || heights[i] >= heights[*stack.last().unwrap()] {
            stack.push(i);
            i += 1;
        } else {
            let top = stack.pop().unwrap();
            let width = if stack.is_empty() { i as i32 } else { (i - stack.last().unwrap() - 1) as i32 };
            let area = heights[top] * width;
            if area > max_area {
                max_area = area;
            }
        }
    }
    while !stack.is_empty() {
        let top = stack.pop().unwrap();
        let width = if stack.is_empty() { i as i32 } else { (i - stack.last().unwrap() - 1) as i32 };
        let area = heights[top] * width;
        if area > max_area {
            max_area = area;
        }
    }
    max_area
}

fn main() {
    let histogram = vec![2, 2, 2, 2];
    println!("{}", largest_rectangle_area(histogram));
}
A6
B4
C8
D2
Attempts:
2 left
💡 Hint
All bars have the same height, so the largest rectangle covers all bars.
🚀 Application
expert
3:00remaining
Maximum Rectangle Area in a Binary Matrix Using Histogram Approach
Given a binary matrix, we convert each row into a histogram of heights of consecutive 1s and use the largest rectangle in histogram algorithm. For the matrix below, what is the maximum rectangle area of 1s? Matrix: [[1, 0, 1, 0, 0], [1, 0, 1, 1, 1], [1, 1, 1, 1, 1], [1, 0, 0, 1, 0]]
A8
B6
C9
D10
Attempts:
2 left
💡 Hint
Build histograms row by row and apply largest rectangle in histogram for each.

Practice

(1/5)
1. What is the main purpose of using a stack in the Largest Rectangle in Histogram problem?
easy
A. To store the maximum area found so far
B. To sort the histogram bars by height
C. To reverse the order of histogram bars
D. To keep track of bars' indices with increasing heights

Solution

  1. Step 1: Understand stack usage in the problem

    The stack stores indices of bars in increasing height order to find boundaries for rectangles.
  2. Step 2: Explain why this helps

    This allows quick calculation of largest rectangle areas when a smaller height bar is found.
  3. Final Answer:

    To keep track of bars' indices with increasing heights -> Option D
  4. Quick Check:

    Stack tracks indices with increasing heights = C [OK]
Hint: Stack holds indices of increasing heights for area calculation [OK]
Common Mistakes:
  • Thinking stack sorts bars by height
  • Using stack to store areas directly
  • Ignoring the order of bars in stack
2. Which of the following Rust code snippets correctly initializes an empty stack to store indices for the histogram bars?
easy
A. let mut stack: Vec<usize> = Vec::new();
B. let stack = Vec::with_capacity(0);
C. let stack: Vec<i32> = Vec::new();
D. let mut stack: Vec<i32> = Vec::new();

Solution

  1. Step 1: Identify correct stack type for indices

    Indices are usize type, so stack must be Vec<usize>.
  2. Step 2: Check mutability and initialization

    Stack must be mutable and initialized empty with Vec::new().
  3. Final Answer:

    let mut stack: Vec<usize> = Vec::new(); -> Option A
  4. Quick Check:

    Mutable Vec of usize initialized empty = B [OK]
Hint: Use mutable Vec<usize> for indices stack [OK]
Common Mistakes:
  • Using wrong type like i32 for indices
  • Not making stack mutable
  • Using Vec::with_capacity(0) without mut
3. What is the output of the following Rust code that calculates the largest rectangle area in the histogram heights = [2, 1, 5, 6, 2, 3]?
fn largest_rectangle_area(heights: Vec<i32>) -> i32 {
    let mut stack: Vec<usize> = Vec::new();
    let mut max_area = 0;
    let mut i = 0;
    while i <= heights.len() {
        let h = if i == heights.len() { 0 } else { heights[i] };
        if stack.is_empty() || h >= heights[*stack.last().unwrap()] {
            stack.push(i);
            i += 1;
        } else {
            let top = stack.pop().unwrap();
            let width = if stack.is_empty() { i } else { i - stack.last().unwrap() - 1 };
            max_area = max_area.max(heights[top] * width as i32);
        }
    }
    max_area
}

fn main() {
    println!("{}", largest_rectangle_area(vec![2, 1, 5, 6, 2, 3]));
}
medium
A. 12
B. 10
C. 9
D. 8

Solution

  1. Step 1: Trace stack and area calculation

    For heights [2,1,5,6,2,3], largest rectangle area is 10 (from bars 5 and 6 with width 2).
  2. Step 2: Confirm max_area value

    Code correctly calculates max_area as 10 after processing all bars.
  3. Final Answer:

    10 -> Option B
  4. Quick Check:

    Largest rectangle area = 10 [OK]
Hint: Largest rectangle area for example histogram is 10 [OK]
Common Mistakes:
  • Confusing max area with sum of heights
  • Miscomputing width when popping stack
  • Forgetting to add sentinel zero height
4. Identify the bug in this Rust code snippet for Largest Rectangle in Histogram and select the fix:
fn largest_rectangle_area(heights: Vec<i32>) -> i32 {
    let mut stack: Vec<usize> = Vec::new();
    let mut max_area = 0;
    let mut i = 0;
    while i < heights.len() {
        if stack.is_empty() || heights[i] >= heights[*stack.last().unwrap()] {
            stack.push(i);
            i += 1;
        } else {
            let top = stack.pop().unwrap();
            let width = if stack.is_empty() { i } else { i - stack.last().unwrap() - 1 };
            max_area = max_area.max(heights[top] * width as i32);
        }
    }
    max_area
}
medium
A. Subtract 1 from width calculation: i - stack.last().unwrap() - 1
B. Change while condition to i <= heights.len() and use 0 height sentinel
C. Make stack mutable by adding 'mut' keyword
D. Initialize max_area with i32::MIN instead of 0

Solution

  1. Step 1: Identify width calculation error

    Width should be i - stack.last().unwrap() - 1 to exclude the popped bar's index.
  2. Step 2: Explain fix impact

    Without subtracting 1, width is overcounted, causing wrong area calculation.
  3. Final Answer:

    Subtract 1 from width calculation: i - stack.last().unwrap() - 1 -> Option A
  4. Quick Check:

    Correct width calculation subtracts 1 [OK]
Hint: Width = i - previous index - 1 when popping stack [OK]
Common Mistakes:
  • Missing -1 in width calculation
  • Not handling sentinel zero height
  • Incorrect while loop condition
5. Given a histogram with heights [6, 2, 5, 4, 5, 1, 6], what is the largest rectangle area using the stack approach? Explain how the stack helps find this area.
hard
A. 8
B. 10
C. 12
D. 15

Solution

  1. Step 1: Use stack to track indices with increasing heights

    Push indices while heights increase; pop when current height is less to calculate areas.
  2. Step 2: Calculate largest rectangle area

    Largest rectangle area is 12 (from bars at indices 2,3,4 with min height 4 and width 3).
  3. Final Answer:

    12 -> Option C
  4. Quick Check:

    Stack helps find max area 12 [OK]
Hint: Stack finds max area 12 by tracking increasing heights [OK]
Common Mistakes:
  • Calculating area without considering width correctly
  • Ignoring bars after popping stack
  • Not using sentinel zero height to flush stack
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