本题要求柱状图中能勾勒出的最大矩形面积,使用单调栈,要求出单调栈栈顶元素左右比其小的第一个元素,因此使用递减栈,在遇到比栈顶元素小的元素时以栈顶元素为基准计算最大矩形面积。为了避免单调递减无法计算结果并且使所有元素都作为基准计算最大矩形面积,因此在数组的开头与结尾要加上元素0。
具体代码如下:
cpp
class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
stack<int>st;
int result=0;
heights.insert(heights.begin(),0);
heights.push_back(0);
st.push(0);
for(int i=1;i<heights.size();i++)
{
if(heights[i]>heights[st.top()])
{
st.push(i);
}
else if(heights[i]==heights[st.top()])
{
st.pop();
st.push(i);
}
else
{
while(!st.empty()&&heights[st.top()]>heights[i])
{
int mid=st.top();
st.pop();
if(!st.empty())
{
int left=st.top();
int right=i;
result=max(result,heights[mid]*(right-left-1));
}
}
st.push(i);
}
}
return result;
}
};