首页 > 试题广场 >

直方图内最大矩形

[编程题]直方图内最大矩形
  • 热度指数:4782 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个数组heights,长度为n,height[i]是在第i点的高度,那么height[i]表示的直方图,能够形成的最大矩形是多少?
1.每个直方图宽度都为1
2.直方图都是相邻的
3.如果不能形成矩形,返回0即可
4.保证返回的结果不会超过231-1

数据范围:



如输入[3,4,7,8,1,2],那么如下:


示例1

输入

[3,4,7,8,1,2]

输出

14
示例2

输入

[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;
}

发表于 2022-07-27 09:57:15 回复(0)