Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of largest rectangle in the histogram.
Above is a histogram where width of each bar is 1, given height = [2,1,5,6,2,3]
.
The largest rectangle is shown in the shaded area, which has area = 10
unit.
需要维护一个栈,栈中的元素递增
class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
int res = 0;
stack<int> st;//维护一个栈
heights.push_back(0);
for (int i = 0; i < heights.size(); ++i)
{
if (st.empty() || heights[st.top()] < heights[i])
{
st.push(i);
}
else
{
int cur = st.top(); st.pop();//将栈顶元素pop
res = max(res, heights[cur] *(st.empty() ? i : (i - st.top() - 1)));
--i;
}
}
return res;
}
};