Search K
Appearance
Welcome
Appearance
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
示例 1:

输入: heights = [2,1,5,6,2,3] 输出: 10 解释: 最大的矩形为图中红色区域,面积为 10
示例 2:

输入: heights = [2,4] 输出: 4
提示:
1 <= heights.length <=1050 <= heights[i] <= 104class Solution
{
public:
int largestRectangleArea(vector<int> &heights)
{
if(heights.size() == 1) return heights[0];
if(heights.size() == 2) return max(min(heights[0],heights[1])*2,max(heights[0],heights[1]));
heights.insert(heights.begin(),0);
heights.push_back(0);
int result = 0;
stack<int> s;
s.push(0);
for(int i = 1; i < heights.size(); i++)
{
if(heights[i] > heights[s.top()])
{
s.push(i);
}
else if(heights[i] == heights[s.top()])
{
s.pop();
s.push(i);
}
else
{
while (!s.empty() && heights[i] < heights[s.top()])
{
int mid = s.top();
s.pop();
if (!s.empty())
{
result = max(result, (i - 1 - s.top()) * heights[mid]);
}
}
s.push(i);
}
}
return result;
}
};