给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
示例 1:
输入:heights = [2,1,5,6,2,3] 输出:10 解释:最大的矩形为图中红色区域,面积为 10
思路
找到该柱子
左边比他小的
右边比他小的
就是他最大面积了
int largestRectangleArea(int* heights, int heightsSize) {
int s[10000000];
int tail=0;
s[0]=0;
int max=-1;
for(int i=0;i<heightsSize;i++)
{
if(heights[i]>=heights[s[tail]])
{
s[++tail]=i;
}
else
{
while(tail!=-1&&heights[i]<heights[s[tail]])
{
if(tail-1==-1)
{
max=fmax(max,i*heights[s[tail]]);
}
else
{
max=fmax(max,(i-s[tail-1]-1)*heights[s[tail]]);
}
tail--;
}
s[++tail]=i;
}
}
int i=heightsSize;
while(tail!=-1)
{
if(tail-1==-1)
{
max=fmax(max,i*heights[s[tail]]);
}
else
{
max=fmax(max,(i-s[tail-1]-1)*heights[s[tail]]);
}
tail--;
}
return max;
}