栈----5.柱状图中最大的矩形

【每日刷题】柱状图中最大的矩形 题目地址 https://leetcode-cn.com/problems/largest-rectangle-in-histogram/ 题目描述:柱状图中最大的矩形 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。 ... 阅读详情

84. 柱状图中最大的矩形 - 力扣(LeetCode)

 /**

        矩形面积计算规则:

                以当前柱子为起点,向左寻找第一个更低的为左边界,向右寻找第一个更低的为右边界

                S = (right - left - 1) * heights[i]

        单调栈:

                双重循环暴力枚举寻找边界,O(n²); 引入单调栈一次遍历得出所有柱子左右边界

                首先将元素逐个入栈,栈中存放柱子索引

                若待入栈元素比栈顶元素小,栈顶元素右边界确定即为待入栈元素,弹出栈顶元素,重复上述流程直到栈为空或待入栈元素比栈顶元素大

                若待入栈元素比栈顶元素大,则待入栈元素左边界即为栈顶元素,入栈

        初始化:

                左边界初始化为-1;右边界初始化为heights.length

                     

*/

class Solution {
    /**
        矩形面积计算规则:
                以当前柱子为起点,向左寻找第一个更低的为左边界,向右寻找第一个更低的为右边界
                S = (right - left - 1) * heights[i]
        单调栈:
                双重循环暴力枚举寻找边界,O(n²); 引入单调栈一次遍历得出所有柱子左右边界
                首先将元素逐个入栈,栈中存放柱子索引
                若待入栈元素比栈顶元素小,栈顶元素右边界确定即为待入栈元素,弹出栈顶元素,重复上述流程直到栈为空或待入栈元素比栈顶元素大
                若待入栈元素比栈顶元素大,则待入栈元素左边界即为栈顶元素,入栈 
        初始化:
                左边界初始化为-1;右边界初始化为heights.length
                     
     */
    public int largestRectangleArea(int[] heights) {
        //初始化
        int len = heights.length;
        int[] left = new int[len];
        int[] right = new int[len];
        Arrays.fill(left,-1); //左边界初始化为-1;(左边没有更低的柱子)
        Arrays.fill(right,len); //右边界初始化为length;(右边没有更低的柱子)

        Deque<Integer> stack = new ArrayDeque<>();

        for(int i = 0; i < len; i++) {
            //待入栈元素比栈顶元素小,栈顶元素右边界确定即为待入栈元素
            while(!stack.isEmpty() && heights[i] < heights[stack.peek()]) {
                //栈顶元素右边界为待入栈元素,弹出栈顶元素
                int index = stack.pop();
                right[index] = i;
            }

            //待入栈元素比栈顶元素大,则待入栈元素左边界即为栈顶元素,入栈 
            if(!stack.isEmpty()) {
                left[i] = stack.peek();
            }

            //入栈,若栈为空也直接入栈,左边界为初始化的-1
            stack.push(i);
        }

        //左、右边界计算完毕 计算矩形面积
        int maxArea = 0;
        for(int i = 0; i < len; i++) {
            int area = (right[i] - left[i] - 1) * heights[i];
            maxArea = Math.max(maxArea,area);
        }

        return maxArea;
    }
}

leetcode-hot100-12栈 此时计算两个下标差值即为等待天数,将结果存入对应位置并弹出栈顶,重复此过程直到栈为空或栈顶温度不小于当前温度,再将当前下标入栈等待后续匹配,最终得到每个位置所需的等待天数。输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。栈中只存储温度数组的下标,遍历每个温度时,若当前温度大于栈顶下标对应的温度,说明栈顶下标位置。的下标,通过边界计算最大宽度,最终算出所有柱子对应的矩形面积,取最大值。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数。,表示每天的温度,返回一个数组。 阅读详情

相关推荐

84. 柱状图中最大的矩形/C++

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。 图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。 示例: 输入: [2,1,5,6,2,3] 输出: 10 这道题我看了很多解析,但是都不太了解。最...

Zolewit的博客 2万+

力扣-数据结构-栈相关

输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。个非负整数,用来表示柱状图中各个柱子的高度。天,下一个更高温度出现在几天后。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数。--> 返回 -3.--> 返回 -2.给定一个经过编码的字符串,返回它解码后的字符串。求在该柱状图中,能够勾勒出来的矩形的最大面积。操作,并能在常数时间内检索到最小元素的栈。最大的矩形为图中红色区域,面积为 10。,表示每天的温度,返回一个数组。,表示其中方括号内部的。

2302_80515827的博客 1568

柱状图中最大的矩形多种解法

一、前言 问题来源LeetCode 84,难度:困难 问题链接:https://leetcode-cn.com/problems/largest-rectangle-in-histogram/ 二、题目 给定n个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例: 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为[2,1,5,6,2,3]。 图中阴影部分为所能勾勒出的最大矩形面积,...

行走 4980

【LeetCode 手撕算法】(栈)有效括号、最小栈、字符串解码、每日温度、柱状图最大矩形

本文总结了栈(Stack)的基本操作和常见应用场景。主要内容包括:1. 栈的基本操作:push(压栈)、pop(弹栈)、peek(查看栈顶)、isEmpty(判空)、size(获取元素个数)等,并指出了常见错误及解决方法;2. 栈的典型应用场景:括号匹配、表达式求值、单调栈、DFS、撤销操作等,并提供了LeetCode相关题目;3. 具体代码实现:包括有效的括号(20)、最小栈(155)、字符串解码(394)、每日温度(739)、柱状图最大矩形(84)等经典问题的Java解法,详细说明了算法思路和实现要点。

硕士在读小菜鸟的博客 435

MIPI转LVDS芯片调试实战:从Kernel到UEFI的完整点亮流程

本文详细解析了MIPI转LVDS芯片调试的全流程,从Kernel驱动开发到UEFI早期初始化,涵盖I2C通信、电源时序控制等核心挑战。通过LT9211芯片实战案例,提供设备树配置、电源时序优化及显示异常排查等实用技巧,助力工程师高效完成屏幕调试工作。

weixin_30314813的博客 452

破解雪球网acw_sc__v2加密与无限debugger反爬策略

本文详细解析了雪球网的反爬机制,重点破解了其核心的acw_sc__v2加密参数与无限debugger反调试策略。通过实战案例,从抓包分析、逆向调试到算法还原,提供了完整的Python代码实现,帮助开发者掌握应对类似加密反爬的通用方法。

weixin_29207533的博客 1905

C++刷 LeetCode Hot100 笔记(九)栈与单调栈专题:有效的括号、最小栈、字符串解码、每日温度、柱状图中最大的矩形

前面已经把:数组、哈希、双指针、滑动窗口链表专题这些比较常见的基础块过了一遍。这一篇开始进入 栈。很多人一开始学栈的时候,感觉它很简单,不就是“先进后出”吗。 但真正刷 Hot100 的时候你会发现:栈简单归简单,但特别能出题。尤其是下面这几类:括号匹配表达式 / 字符串展开维护“最近更大 / 更小”元素单调栈优化区间问题栈的特点就一句话:就像一摞盘子:最后放上去的最先拿出来C++ 里最常用的是: 几个最常用操作: 你现在先别把它看得太复杂,前期就把它理解成:一个只能从顶部操作的容器。你先记几个特别

2301_79911329的博客 489

强化学习——day16 动态规划算法

动态规划(dynamic programming)是程序设计算法中非常重要的内容,能够高效解决一些经典问题,例如背包问题和最短路径规划。动态规划的基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到目标问题的解。动态规划会保存已解决的子问题的答案,在求解目标问题的过程中,需要这些子问题答案时就可以直接利用,避免重复计算。本章介绍如何用动态规划的思想来求解在马尔可夫决策过程中的最优策略

想太多的学习日志 1551

LeetCode Hot 100 | 栈(C++ 题解)

为例:| 步骤 | 字符 | 操作 | 栈状态 ||------|------|------|--------|| 1 | ‘(’ | 压入 ‘)’ | [‘)’] || 2 | ‘)’ | 栈顶==‘)’ 匹配,pop | [] || 3 | ‘[’ | 压入 ‘]’ | [‘]’] || 4 | ‘]’ | 匹配,pop | [] || 5 | ‘{’ | 压入 ‘}’ | [‘}’] || 6 | ‘}’ | 匹配,pop | [] || 结束 | 栈空 → true |### 复杂度分析-

jcm0903的博客 355

springboot整合sharding-jdbc实现分库分表详解

springboot整合sharding-jdbc实现分库分表详解

congge 9090

hot100-栈

每当我们找到了一个比栈顶元素小的元素,那么对于栈顶元素,倒数第二个元素和未入栈的元素是比当前元素小的元素,那么要算以当前栈顶元素为高的最大面积就是中间的间隔*栈顶元素的高度。也就是说,对于每一个栈顶元素-1,-2的位置对应的温度会更高。当一个新的元素入栈前,如果比当前的栈顶元素来得高,那么栈顶元素对应的下一个最大元素就找到了。可以维护一个存储下标的单调栈,从栈底到栈顶的下标对应的温度列表中的数值递减。也就是说,对于每一个栈顶元素-1,-2的位置对应的柱子会更低。所有操作的时间复杂度:O(1)

m0_69649486的博客 612

innovus:streamOut gds中pg text带有冒号(:)解决办法

streamOut后查看layout,发现部分PG text后面加了冒号,比如VDD: / VSS:。当然,这个问题还有另一种解决办法,就是通过脚本给terminal打text再streamOut。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1192

栈 69-73

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1。天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数。给定一个经过编码的字符串,返回它解码后的字符串。求在该柱状图中,能够勾勒出来的矩形的最大面积。,表示每天的温度,返回一个数组。,判断字符串是否有效。,表示其中方括号内部的。

Lcberg的博客 174

25、BDS-3卫星信号性能与PPP-B2b增强消息完整性分析

本文对BDS-3卫星信号性能及PPP-B2b增强消息的完整性进行了系统分析。评估了MEO、IGSO和GEO卫星的轨道与时钟精度,得出BDS-3总体SISRE为0.25 m,系统完整性可覆盖99.999%的误差。分析表明SIS中断主要由时钟调整和轨道机动引起,个别卫星存在因境外监测受限导致的非计划中断。通过自研解码软件对PPP-B2b增强消息进行采集与解析,实验结果显示BDS-3和GPS的平均历元完整性率均高于98.55%,其中卫星掩码和时钟校正消息的完整性率超过99.8%。研究还发现IGSO卫星相比MEO卫

quiet的专栏 145

YOLOv11涨点改进 | 首发全网创新、主干改进篇 | AAAI 2026 | PartialNet 主干让 YOLOv11 更加强大!引入部分通道机制 和 部分注意力卷积,全方面提升了模型的性能

本文提出PartialNet主干网络改进YOLOv11的方法,通过部分通道机制(PCM)和部分注意力卷积(PATConv)提升模型效率。PartialNet将特征图通道拆分并应用不同操作,显著减少计算量和内存占用。主要创新包括:1)部分通道机制实现计算优化;2)三种注意力模块(PATch/PATsp/PATsf)增强特征提取;3)动态部分卷积(DPConv)自适应调整计算复杂度。文章详细提供了代码实现和YOLOv11集成方法。

Ai缝合怪、助力小伙伴高效发论文 268

小鸡玩算法-力扣HOT100-栈

力扣HOT100-java-栈(有效的括号、最小栈、字符串解码、每日温度、柱状图中最大的矩形)

suo57Kn的博客 369

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

hot100 栈专题

hot100栈专题

I_CLK的博客 512

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【代码随想录】单调栈专题(Python)

若当前元素比栈顶元素大,循环尽此种情况,出栈记为mid,栈顶记为left,待入栈记为right,r=(min(right,left)-mid)*(ir-il-1)。对于每一列,找左边比它矮的坐标,和右边比它矮的坐标,ri=height[i]*(right-left-1)按列算,每列可以接雨水的值=min(左边最高列,右边最高列)-本列高度。入栈,循环与栈顶比较,若小则入栈,若大则记录答案并出栈。若当前元素比栈顶元素相等,出栈,再入栈;与1相比,整个数组处理两次即可。若当前元素比栈顶元素小,入栈;

qq_45600779的博客 298

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【力扣hot100】栈通关指南(5道经典题,从括号匹配到单调栈讲透栈思维)

本文系统讲解了力扣Hot100中栈相关的5道典型题目,采用"三步走"方法论(暴力解法→思路转换→栈优化)进行拆解。文章首先归纳了栈的四种应用模式:匹配型(如括号配对)、辅助型(如最小栈)、单调型(如每日温度)和嵌套型(如字符串解码)。随后详细分析了每道题的解题思路: 有效的括号(简单):通过左括号入栈、右括号匹配出栈实现括号验证 最小栈(中等):使用辅助栈保存历史最小值实现O(1)查询 每日温度(中等):单调递减栈高效找到右侧第一个更高温度 字符串解码(中等):双栈处理嵌套结构(数字栈+

lsir10110_的博客 358

力扣hot100—系列6-栈

什么时候用栈?题目有“匹配”、“最近相关性”、“逆序输出”、“撤销操作”等关键词时。什么是单调栈?专门解决“寻找左/右边第一个比我大/小的元素”。下标 or 数值?在单调栈题目(如温度、矩形)中,通常栈里存的是下标,因为下标既能找到数值,又能计算距离。像“矩形”这类题,加个0可以避免处理遍历完后栈内还有残留元素的情况,非常实用。

qq_60957452的博客 901

【力扣hot100】栈专题|20、155、394、739、84

栈是一种"后进先出"的数据结构,看似简单,却能在很多经典问题中发挥强大作用。本专题精选力扣 Hot 100 中与栈相关的核心题目,涵盖括号匹配、单调栈、表达式求值、栈模拟队列等高频考点。 通过本专题,你将掌握:用栈处理嵌套与匹配类问题的基本套路;单调栈如何高效求解"下一个更大/更小元素"与"最大矩形面积"等问题;以及如何通过栈实现复杂的数据结构

2401_87144364的博客 439

LeetCode热题100JS(74/100)第十四天|155|394|739|84|215

定义各种方法用MinStack.prototype.注意sum的计算方法,0也包含在里面注意res[t]=i-t,这里计算的是第t天的天数差,同一个i可能对应好几个t不好理解,多看看题解链接,然后console出来看看数据注意let mid=nums[Math.floor((left+right)/2)]这里不能写成let mid=Math.floor((left+right)/2),然后后面用nums[mid],因为left,right会影响该值。

Alicesflower的博客 1009

【JAVA算法|hot100】栈类型题目详解笔记

这里记录刷hot100的思考过程详解,方便后续记忆复习。

2303_80850235的博客 1029

084.largest-rectangle-in-histogram

Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of largest rectangle in the histogram. Above is a histogram where width of each bar is 1, given height = [2,1,5,6,2,3]. The large.

JanLEE 136

19016 柱状图中最大的矩形

Description 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 输入格式 第一行一个整数n代表柱子个数。1<=n<=1e5 第二行n个正整数,代表柱子的高度。 输出格式 输出最大面积。(注意此类题目的答案可能超出int范围) 输入样例 6 2 1 5 6 2 3 输出样例 10 解题思路: 思路: 单调栈,栈中存储的是当前矩形可以往左右延伸的下标 枚举每一个矩形能够往左往右延伸的最大下标,即往左

Hunter_Kevin的博客 154
上一篇: 栈----4.每日温度
下一篇: 堆----1.数组中的第K个最大元素
码破苍穹ovo
博客等级 码龄2年 377粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值