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.
Solution Approach
Expected Time complexity:
Click - to see solution code
- C++
class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
int n = heights.size();
vector<int> indexes(n);
vector<int> ans(n);
stack<pair<int, int>> st;
st.push({-1, n});
for (int i = n - 1; i >= 0; i--) {
while (st.top().first >= heights[i]) st.pop();
indexes[i] = st.top().second;
st.push({heights[i], i});
ans[i] = (indexes[i] - i) * heights[i];
}
while (!st.empty()) st.pop();
st.push({-1, -1});
int area = 0;
for (int i = 0; i < n; i++) {
while (st.top().first >= heights[i]) st.pop();
indexes[i] = st.top().second;
st.push({heights[i], i});
ans[i] = ans[i] + heights[i] * (i - indexes[i]) - heights[i];
area = max(ans[i], area);
}
return area;
}
};