📖 Scenario: Imagine you have a row of buildings with different heights. You want to find the largest rectangular area that can fit inside these buildings when viewed from the side.
🎯 Goal: Build a Go program that uses a stack to find the largest rectangle area in a histogram represented by building heights.
📋 What You'll Learn
Create a slice called heights with exact values: 2, 1, 5, 6, 2, 3
Create an integer variable maxArea to store the largest rectangle area
Use a stack (slice of integers) to help find the largest rectangle
Implement the logic to calculate the largest rectangle area using the stack
Print the final maxArea value
💡 Why This Matters
🌍 Real World
Finding the largest rectangle in a histogram is useful in image processing, stock market analysis, and land area calculations.
💼 Career
This problem teaches stack usage and efficient area calculation, common in technical interviews and real-world algorithm design.
Progress0 / 4 steps
1
Create the histogram heights slice
Create a slice of integers called heights with these exact values: 2, 1, 5, 6, 2, 3.
DSA Go
Hint
Use heights := []int{2, 1, 5, 6, 2, 3} to create the slice.
2
Initialize maxArea and stack
Create an integer variable called maxArea and set it to 0. Also create an empty slice of integers called stack to use as a stack.
DSA Go
Hint
Use maxArea := 0 and stack := []int{}.
3
Implement the stack logic to find largest rectangle
Write a for loop with variable i from 0 to len(heights) inclusive. Inside the loop, use a for loop to pop from stack while stack is not empty and the current height is less than the height at the top of stack. Calculate the area for each popped height and update maxArea if the area is larger. After the inner loop, append i to stack. Use heights with an extra 0 height at the end for the loop.
DSA Go
Hint
Use a loop over extendedHeights with an extra 0 at the end. Pop from stack while current height is less than top of stack height. Calculate area and update maxArea. Append i to stack.
4
Print the largest rectangle area
Write a fmt.Println(maxArea) statement to print the largest rectangle area found.
DSA Go
Hint
Use fmt.Println(maxArea) to print the result.
Practice
(1/5)
1. What is the main purpose of using a stack in the Largest Rectangle in Histogram problem?
easy
A. To sort the histogram bars by height
B. To store the maximum area found so far
C. To keep track of bars' indices with increasing heights
D. To reverse the order of histogram bars
Solution
Step 1: Understand stack usage
The stack stores indices of bars in increasing height order to find boundaries efficiently.
Step 2: Purpose in algorithm
This helps quickly calculate the largest rectangle when a smaller height bar is found.
Final Answer:
To keep track of bars' indices with increasing heights -> Option C
Quick Check:
Stack tracks increasing bars = B [OK]
Hint: Stack stores indices of increasing heights [OK]
Common Mistakes:
Thinking stack sorts bars by height
Using stack to store areas instead of indices
Ignoring the order of bars in stack
2. Which Go syntax correctly declares a stack to hold indices for the histogram bars?
easy
A. var stack []int
B. stack := make(map[int]int)
C. stack := []string{}
D. var stack int
Solution
Step 1: Identify stack type
The stack holds indices, which are integers, so it should be a slice of int.
Step 2: Check syntax correctness
"var stack []int" declares an empty slice of int, suitable for stack operations.
Final Answer:
var stack []int -> Option A
Quick Check:
Stack as []int slice = C [OK]
Hint: Use slice of int for stack indices [OK]
Common Mistakes:
Using map instead of slice for stack
Declaring stack as int instead of slice
Using string slice for integer indices
3. What is the output of the following Go code snippet for histogram heights [2, 1, 5, 6, 2, 3]?
func largestRectangleArea(heights []int) int {
stack := []int{}
maxArea := 0
for i := 0; i <= len(heights); i++ {
var h int
if i == len(heights) {
h = 0
} else {
h = heights[i]
}
for len(stack) > 0 && h < heights[stack[len(stack)-1]] {
height := heights[stack[len(stack)-1]]
stack = stack[:len(stack)-1]
var width int
if len(stack) == 0 {
width = i
} else {
width = i - stack[len(stack)-1] - 1
}
area := height * width
if area > maxArea {
maxArea = area
}
}
stack = append(stack, i)
}
return maxArea
}
fmt.Println(largestRectangleArea([]int{2, 1, 5, 6, 2, 3}))
medium
A. 6
B. 12
C. 8
D. 10
Solution
Step 1: Trace stack and area calculation
Process bars: max area found is 10 (from bars 5 and 6 with width 2).
Step 2: Confirm max area
No larger rectangle found; 10 is the largest rectangle area.
Final Answer:
10 -> Option D
Quick Check:
Largest rectangle area = 10 [OK]
Hint: Largest area is max of all popped rectangles [OK]
Common Mistakes:
Forgetting to add a zero height bar at end
Incorrect width calculation after popping stack
Not updating maxArea correctly
4. Identify the bug in this Go code snippet for Largest Rectangle in Histogram:
for i := 0; i < len(heights); i++ {
for len(stack) > 0 && heights[i] < heights[stack[len(stack)-1]] {
height := heights[stack[len(stack)-1]]
stack = stack[:len(stack)-1]
width := i
if len(stack) > 0 {
width = i - stack[len(stack)-1] - 1
}
area := height * width
if area > maxArea {
maxArea = area
}
}
stack = append(stack, i)
}
return maxArea
medium
A. Loop should run until i <= len(heights) with a sentinel zero height
B. Width calculation is incorrect when stack is empty
C. Stack should store heights, not indices
D. maxArea should be reset inside the loop
Solution
Step 1: Check loop boundary
The loop misses processing the last bars fully without a sentinel zero height at the end.
Step 2: Fix loop to include sentinel
Loop should run until i <= len(heights) and treat i == len(heights) as height 0 to pop all remaining bars.
Final Answer:
Loop should run until i <= len(heights) with a sentinel zero height -> Option A
Quick Check:
Loop boundary with sentinel zero fixes bug [OK]
Hint: Add sentinel zero height to process all bars [OK]
Common Mistakes:
Not adding sentinel zero height
Incorrect width calculation when stack empty
Resetting maxArea inside loop incorrectly
5. Given a histogram with heights [6, 2, 5, 4, 5, 1, 6], what is the largest rectangle area using the stack method?
hard
A. 12
B. 15
C. 8
D. 10
Solution
Step 1: Analyze bars and stack operations
Largest rectangle is formed by bars with min height 5 spanning width 3 (indices 2 to 4: heights 5,4,5), area = 5*3 = 15.
Step 2: Confirm no larger area
Other rectangles like 4*3=12 or 2*5=10 are smaller; 15 is maximum.
Final Answer:
15 -> Option B
Quick Check:
Max rectangle area = 15 [OK]
Hint: Check width between popped bars for max area [OK]
Common Mistakes:
Calculating width incorrectly
Missing wider rectangle spanning multiple bars
Not popping all bars at the end
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.