最大矩形面积问题——单调栈法

本文介绍了如何使用单调栈法解决直方图最大矩形面积问题和矩阵中最大矩形问题。通过分析算法思路,展示了从暴力破解、分治法到单调栈法的优化过程,并给出了具体代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最大矩形面积问题——单调栈法

直方图最大矩形面积

  • 题目地址

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

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

示例1

img

输入:heights = [2,1,5,6,2,3]
输出:10
解释:最大的矩形为图中红色区域,面积为 10

示例2

img

输入: heights = [2,4]
输出: 4
分析
  • 矩形的面积就是宽x高,因此只要能确定每个举行的宽和高,就能计算出它的面积。

  • 宽可以通过数组下标相减的方式获得,至于高,只需要找对应范围的数组中的最小值即可得到,由此便可以得到面积

  • 该类题型有三种解法:暴力破解、分治法、单调栈法。

    • 暴力破解
      • 即便利所有的矩形,同时维护一个表示最大面积的变量即可
    • 分治法
      • 观察示例1可以发现,直方图的最大矩形有以下三种可能:
        • 1、矩形通过最矮的柱子,宽是最大的状态下。
        • 2、起始的柱子和终止的柱子始终在最矮的柱子的左侧。
        • 3、起始的柱子和终止的柱子始终在最矮的柱子的右侧。
      • 于是可以有如下思路:找到最矮的柱子,分别计算这三种状态,其中23本质上是同一种情况,即将一个区域分成左右两遍,求最大矩形,如此便是两个相同的子问题,可递归求解。
    • 单调栈法
      • 见下节
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

椰子奶糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值