定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。
图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。
示例:
输入: [2,1,5,6,2,3]
输出: 10
通过维护一个递增栈。
如果此时存放下标[1,2,3].来了下标为4,也就是值为2.此时2<6.
首先要以6为最高点,往右数,一直数到下标4,也就是只有一个。 6x1=6
在以5为最高点,因为我们维护的是递增栈,所有后面的一定比5高。所以直接求 坐标4到坐标2的距离,为2*5=10
class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
heights.push_back(0);
int n=heights.size();
int maxx=0;
stack<int>st;
for(int i=0;i<n;i++)
{
while((!st.empty())&&heights[i]<heights[st.top()])
{
int id=st.top();
st.pop();
if(st.empty())
{
maxx=max(maxx,heights[id]*i);
}
else
{
int qian=st.top();
maxx=max(maxx,(i-1-qian)*heights[id]);
}
}
st.push(i);
}
return maxx;
}
};