给定一个数组heights,长度为n,height[i]是在第i点的高度,那么height[i]表示的直方图,能够形成的最大矩形是多少?
1.每个直方图宽度都为1
2.直方图都是相邻的
3.如果不能形成矩形,返回0即可
4.保证返回的结果不会超过231-1
数据范围:
如输入[3,4,7,8,1,2],那么如下:
[3,4,7,8,1,2]
14
[1,7,3,2,4,5,8,2,7]
16
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param heights int整型一维数组
* @param heightsLen int heights数组长度
* @return int整型
*
* C语言声明定义全局变量请加上static,防止重复定义
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
int largestRectangleArea(int* heights, int heightsLen ) {
// write code here
if(heightsLen==0){
return 0;
}
int stack[heightsLen];
int top=-1;
int max=0;
stack[++top]=0;
int i;
for(i=1;i<heightsLen+1;i++){
if(i<heightsLen&&(top==-1||heights[i]>heights[stack[top]])){
stack[++top]=i;
}
else if(top>0){
max=heights[stack[top]]*(i-1-stack[top-1])>max?heights[stack[top]]*(i-1-stack[top-1]):max;
top--;
i--;
}
else if(top==0){
max=heights[stack[top]]*i>max?heights[stack[top]]*i:max;
top--;
i--;
}
}
return max;
}