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

分析:

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

总结:

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

相关推荐
八解毒剂25 分钟前
数据结构-平衡二叉树——对二叉搜索树的优化
数据结构·c++·算法
运行时记录1 小时前
别再手动写提示词了 — SkillOpt 让技能文档自己进化
算法
啦啦啦啦啦zzzz1 小时前
算法总结(二分查找、双指针)
c++·算法
伊布拉西莫1 小时前
【流畅的Python】第20章:并发执行器 — 学习笔记
笔记·python·学习
qq_8573058191 小时前
python语法
开发语言·python·算法
DXM05212 小时前
第9期|从机器学习到深度学习:AI遥感解译的进化逻辑
人工智能·算法·计算机视觉
小蒋学算法2 小时前
算法-阶乘函数后K个零
算法
weixin_307779132 小时前
智能模拟数据生成平台:生成式AI合成数据技术重塑开发测试效能
人工智能·测试工具·算法·测试用例
AOwhisky3 小时前
学习自测与解析:MySQL第五、六、七期核心知识点详解
运维·数据库·笔记·学习·mysql·云计算
羊羊小栈3 小时前
Uplift营销供应链协同决策系统(基于Uplift因果推断与运筹优化算法)
前端·人工智能·算法·毕业设计·大作业