LC084 - Largest Rectangle in Histogram

Problem

Given an array of integers heights representing the histogram's bar height where the width of each bar is 1, return the area of the largest rectangle in the histogram.

Example

Input: heights = [2,1,5,6,2,3]

Output: 10

Explanation: The above is a histogram where width of each bar is 1. The largest rectangle is shown in the red area, which has an area = 10 units.

Solution

Calculate width of potential rectangle for each bar by subtracting starting index from current index. Pop elements from stack to calculate area of formable rectangles when current height is less than height at top of stack.

Time and space complexity is O(n)O(n).

def largestRectangleArea(self, heights: List[int]) -> int:
	maxArea = 0
	stack = []
	
	for index, height in enumerate(heights):
		begin = index
	
		while begin and stack[-1][1] > height:
			i, h = stack.pop()
			maxArea = max(maxArea, (index-i) * h)
			begin = i
		stack.append((begin, height))
	
	for tup in stack:
		index, height = tup[0], tup[1]
		maxArea = max(maxArea, (len(heights)-index)*height)
	
	return maxArea

Last updated