leetcode做题笔记84柱状图中最大的矩形

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

求在该柱状图中,能够勾勒出来的矩形的最大面积。

思路一:单调栈

cpp 复制代码
int largestRectangleArea(int* heights, int heightsSize){
    int top = -1;
    int area, i;
    int maxarea = 0;
    int *stack = (int *)malloc(sizeof(int) * (heightsSize + 2));
    int *buff = (int *)malloc(sizeof(int) * (heightsSize + 2));

    buff[0] = 0;
    for (int i = 1; i <= heightsSize; i++) {
        buff[i] = heights[i - 1];
    }
    buff[heightsSize + 1] = 0;

    stack[++top] = 0;
    for (i = 1; i < heightsSize + 2; i++) {
        while (top > 0 && buff[i] < buff[stack[top]]) {
            area = (i - stack[top - 1] - 1) * buff[stack[top]];
            maxarea = maxarea > area ? maxarea : area;
            top--;
        }
        stack[++top] = i;
    }
    return maxarea;
}

分析:

本题利用单调栈的特性,有两种做法,一是直接从中间数向左右进行递归,判断是否单调递增或递减计算答案,第二种是多加一个空间,从最左边或最右边判断是否为单调递增或递减,此做法多设置了一个空间,利用单调栈向左单调递减的特性找最小值计算矩形的最大值,最后输出答案。

总结:

本题考察单调栈相关知识,利用单调递减递归找到最小值计算矩形大小,最后返回最大值

相关推荐
繁星璀璨G2 分钟前
C++11标准模板(STL)- 常用数学函数 - 计算e的给定幂 (ex)(std::exp, std::expf, std::expl)
开发语言·c++·算法·stl·计算e的给定幂
Leoysq4 分钟前
Oracle 数据库常用命令与操作指南
数据库·笔记·oracle
X² 编程说8 分钟前
14.面试算法-字符串常见算法题(三)
java·数据结构·后端·算法·面试
程序猿练习生9 分钟前
C++速通LeetCode中等第20题-随机链表的复制(三步简单图解)
c++·leetcode·链表
技术卷15 分钟前
golang学习笔记4-基本数据类型
笔记·学习·golang
S01d13r18 分钟前
LeetCode 每周算法 6(图论、回溯)
算法·leetcode·图论
zhangrelay28 分钟前
如何避开学习和研究机器人方向无价值的知识节约时间
笔记·学习·机器人·持续学习
程序员波特35 分钟前
初识算法
数据结构·算法·leetcode
XYLoveBarbecue1 小时前
C++ 把字符串转换成整数 (atoi) - 力扣(LeetCode)
c++·leetcode
s_little_monster1 小时前
【C++】模版进阶
开发语言·c++·经验分享·笔记·学习·学习方法