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

分析:

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

总结:

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

相关推荐
AA陈超26 分钟前
ASC学习笔记0020:用于定义角色或Actor的默认属性值
c++·笔记·学习·ue5·虚幻引擎
无敌最俊朗@1 小时前
力扣hot100-206反转链表
算法·leetcode·链表
Kuo-Teng2 小时前
LeetCode 279: Perfect Squares
java·数据结构·算法·leetcode·职场和发展
王哈哈^_^2 小时前
YOLO11实例分割训练任务——从构建数据集到训练的完整教程
人工智能·深度学习·算法·yolo·目标检测·机器学习·计算机视觉
IMPYLH2 小时前
Lua 的 collectgarbage 函数
开发语言·笔记·junit·单元测试·lua
檐下翻书1732 小时前
从入门到精通:流程图制作学习路径规划
论文阅读·人工智能·学习·算法·流程图·论文笔记
CoderYanger2 小时前
B.双指针——3194. 最小元素和最大元素的最小平均值
java·开发语言·数据结构·算法·leetcode·职场和发展·1024程序员节
思成不止于此2 小时前
深入理解 C++ 多态:从概念到实现的完整解析
开发语言·c++·笔记·学习·多态·c++40周年
谅望者3 小时前
数据分析笔记08:Python编程基础-数据类型与变量
数据库·笔记·python·数据分析·概率论
小曹要微笑4 小时前
STM32各系列时钟树详解
c语言·stm32·单片机·嵌入式硬件·算法