leetcode(84)柱状图中最大的矩形——栈

Leetcode 84:柱状图中最大的矩形(超详细的解法!!!) 求在该柱状图中,能够勾勒出来的矩形的最大面积。 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。 图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。 示例: 输入: [2,1,5,6,2,3] 输出: 10 解题思路 这个问题非常有意思。我们首先可以想到的是暴力破解,我们通过i不断遍历heights,然后在遍历的过... 阅读详情

题目描述
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
在这里插入图片描述
以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。
在这里插入图片描述
图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。

示例:
输入: [2,1,5,6,2,3]
输出: 10

思路

来自leetcode@powcai
首先,要想找到第 i 位置最大面积是什么?

是以i 为中心,向左找第一个小于 heights[i] 的位置 left_i;向右找第一个小于于 heights[i] 的位置 right_i,即最大面积为 heights[i] * (right_i - left_i -1),如下图所示:
在这里插入图片描述
所以,我们的问题就变成如何找 right_i 和 left_i?

当我们找 i 左边第一个小于 heights[i] 如果 heights[i-1] >= heights[i]其实就是和 heights[i-1] 左边第一个小于 heights[i-1] 一样。依次类推,右边同理。
那么根据官方栈解法,当我们维护一个单调递增的栈,直到遇到相邻柱子呈下降关系,也就是 a[i-1] > a[i]时,可以确定 i - 1 位置 的left_i为 i - 2(因为栈时单增的),right_i为i。得出面积为:

                        (i−(i - 1 )−1)×a[i-1].

对于栈中的每个元素,只要满足a[stack[j] > a[i] ,我们都对他们求面积,更新最大面积。(∵对于stack[j]来说 left_i 和 right_i 也是已知的)
那么我们不断地弹出栈顶元素,直到遇到 stack[j]stack[j] 满足a[stack[j]]≤a[i] ,得出面积为:

                   (i−stack[top−1]−1)×a[stack[top]].

当我们到达数组的尾部时,我们将栈中剩余元素全部弹出栈。在弹出每一个元素是,我们用下面的式子来求面积:

                  (stack[top]−stack[top−1])×a[stack[top]],

其中,stack[top]表示刚刚被弹出的元素。因此,我们可以通过每次比较新计算的矩形面积来获得最大的矩形面积。

代码
class Solution {
public:
    int largestRectangleArea(vector<int>& heights) {
      stack<int> S;
      int maxArea = 0;
      int p = 0;
      while(p < heights.size()){
        if(S.empty()){
            S.push(p);
            ++p;
        }
        else {
            int t = S.top();
            if(heights[p] >= heights[t]){
                S.push(p);
                ++p;
            }
            else{
                int h = heights[S.top()];
                S.pop();
                int r = p;
                int l = S.empty() ? -1 : S.top();
                maxArea = max(maxArea,h * ( r - l - 1));
            }
        }
      }

      while(!S.empty()){
        int h = heights[S.top()];
                S.pop();
                int r = p;
                int l = S.empty() ? -1 : S.top();
                maxArea = max(maxArea,h * ( r - l - 1));
      }

      return maxArea;
    }
};


华为od 面试八股文_C++_04_含答案 阅读详情

相关推荐

神州数码防火墙(DCN)NAT SSL-VPN配置

SSL-VPN是基于应用层的VPN,采用SSL协议来实现远程接入的一种新型VPN技术,比L2TP更加灵活的VPN方案。是天然的安全远程接入方案。用户可以通过浏览器的HTTPSs登录VPN的网址。SSL-VPN的认证方式包括LDAP,radius,CA,USB Key等方式。 SSL VPN的主要应用场景是保证远程用户能够在企业外部安全\高效的访问企业内部的网络资源

qq_50966485的博客 4557

leetcode:栈:柱状图中最大的矩形(困难)

方法一:暴力法 class Solution: """ 思路:比较第i个位置最大的面积,以i为中心,找左右边界 --(超出时间限制) """ def largestRectangleArea(self, heights: List[int]) -> int: maxarea = 0 for i in range(len(heights)) : left = i right = i

Justinboy的博客 240

sentaurus学习笔记(VDMOS仿真)(三)

在Sentaurus中,这通常意味着在2D仿真中,x轴指向下,y轴指向右。定义了在2D模拟中,网格尺寸按照一定的增长率进行扩展,这里的增长率为2.0,意味着远离最小尺寸区域的网格单元大小将是最小尺寸的两倍。定义了2D模拟中网格单元的最小尺寸为0.001微米,这有助于控制网格的最小大小,从而影响仿真的精度和计算成本。表示启用中等级别的日志信息输出,这有助于用户了解仿真过程中发生的事件和可能的问题。表示启用保存调试文件,这可以帮助用户在仿真过程中检查和验证模型的状态。这行代码设置了仿真过程中使用的线程数。

qq_52640792的博客 1807

【leetcode】84 柱状图中最大的矩形(动态规划,栈)

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

zjwreal 921

别再为Word转PDF表格变形发愁了!Aspose.Words for Java 19.5 保姆级避坑指南

本文详细介绍了使用Aspose.Words for Java 19.5解决Word转PDF时表格变形问题的完整方案。从格式转换原理到实战技巧,涵盖固定表格宽度、禁用自动调整、强制文本换行等核心方法,并提供高级场景应对策略和性能优化建议,帮助开发者高效处理复杂文档转换需求。

weixin_28702105的博客 266

专有钉钉小程序(浙政钉)开发搭建流程总览

最近公司有一个项目要做浙政钉,让我来负责做。靠,我一脸懵,开发了两年多不知道浙政钉是啥,感觉我眼界还是低了。然后就去百度、同事问了一圈才知道就是个钉钉小程序嘛,然后发布到浙政钉上了。就搭建项目跑起来我都肥了很多事,中间走了很多坑。正好领导让我写《钉钉小程序前端开发流程》,这想着也写个博客吧。下面就是整个流程及我所遇到的坑!

m0_53910290的博客 6355

leetcode 84. 柱状图中最大的矩形 单调栈O(N)

就是找以当前位置为最小值的最大延展区间 暴力O(n^3)超时 大多数的样例是过了的 class Solution { public: int largestRectangleArea(vector<int>& heights) { int ret = 0; for(int i=0;i<heights.size();i++){ ...

DUT_LYH 733

【实战】YOLOv5/v8模型→RK3588 NPU高效部署:模型转换/量化/精度调优完整指南​

摘要: 本教程详细介绍了YOLOv5模型在RK3588 NPU上的优化部署流程,重点解析了架构转换与量化技术。通过将检测头输出结构与decode操作分离,显著提升了模型在NPU上的兼容性和计算效率。LetterBox预处理方案有效保持图像宽高比,相比直接resize提升检测精度。INT8量化技术采用非对称量化策略,通过scale和zero_point参数实现浮点到整数的转换,在保证精度的同时大幅提升推理速度。实验表明,优化后的模型在RK3588上实现了高效的实时目标检测性能,为边缘AI部署提供了完整解决方案

LXY_LOVE36的博客 625

【算法】leetcode 84. 柱状图中最大的矩形(单调栈)

问题来源 84. 柱状图中最大的矩形 84. 柱状图中最大的矩形 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。 图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。 示例: 输入: [2,1,5,6,2,3] 输出: 10 大佬解析 暴力解法、栈(单调栈、哨兵技巧) 代码 """ 需求:

weixin_43868754的博客 267

流媒体之LL-HLS 低延时HLS协议

LL-HLS协议通过扩展了HLS协议,为实时直播场景提供了更丰富的功能,如延迟控制、播放列表增量更新、阻止播放列表重新加载等。同时客户端可以更灵活地控制播放列表的加载和播放,以适应各种场景和需求。LL-HLS在直播中的延时可以控制在3s内, 但是即使这样, 还是不如RTMP, RTSP等协议的实时性。

技术控的笔记 3365

如何使用Agent框架来模拟群体智能?

Agent 框架作为人工智能领域的重要工具,可以模拟复杂的群体智能行为,广泛应用于社会科学、经济学和行为学等领域。

335

力扣84-柱状图中最大的矩形(最容易看懂的栈图解 Java版题解)

力扣84-柱状图中最大的矩形 一、原题题目 1.1 题目   给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。   以上左图是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。右图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。 1.2 示例 示例: 输入: [2,1,5,6,2,3]输出: 10 来源:力扣(LeetCode)链接:https://leetcod

ItDaChuang的博客 628

YOLOv11的扩散模型去噪预处理-(在推理前对低质量图像进行增强)

摘要: 扩散模型与YOLOv11的结合有效提升了复杂场景下的目标检测性能。针对低质量图像(如噪声、低光照)导致YOLOv11特征提取退化的问题,研究提出了一种基于条件扩散模型的预处理方法。通过语义引导的渐进式去噪,在保留关键检测特征的同时,显著改善了图像质量。技术核心包括:1)利用YOLOv11浅层特征作为条件输入;2)交叉注意力机制实现任务感知去噪;3)知识蒸馏与潜空间扩散加速推理。实验表明,该方法使mAP50提升19%,在15步内达到传统百步去噪效果,平衡了精度与实时性需求,为鲁棒性目标检测提供了新思路

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 877

【每日一题】LeetCode 84.柱状图中最大的矩形(栈、数组、单调栈)

在探索“柱状图中最大的矩形”问题的过程中,我经历了从暴力解法到优化算法的转变。这个挑战不仅考验了我的编程技能,也锻炼了我的耐心和解决问题的决心。通过与同学的深入讨论和不断的尝试,我们最终采用了单调栈的方法,这不仅提高了算法的效率,也让我深刻体会到了数据结构的力量和算法优化的重要性。 这篇文章记录了我的解题心得和对算法学习的感悟,强调了面对挑战时保持热情和好奇心的重要性。我希望通过分享我的经历,鼓励所有算法学习者不畏艰难,持续探索,共同成长,一起在算法的道路上遇见更好的自己。

Hanbuhuic的博客 1537

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

力扣HOT100之栈:84. 柱状图中最大的矩形

我们定义的是从从栈底到栈顶单调递增的栈,所以我们通过下标来遍历数组中的所有元素,当栈不为空且当前遍历到的元素小于栈顶元素时,触发计算条件,我们将栈顶对应的高度记录下来,并将栈顶弹出,再将当前的下标减去新的栈顶元素对应的下标再减一(来维护最大矩形面积,在计算完面积以后,新的栈顶对应的高度仍然可能大于当前的柱子高度,因此我们需要持续地计算矩形的面积,直到当前柱子的高度大于等于栈顶高度,才将其压入栈中。的单调性还是略有区别的。当时刷代码随想录的时候刷过这道题,当时就觉得很难,现在回过头来看依旧很难(ˉ▽ˉ;

weixin_52151595的博客 461

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LeetCode 84. 柱状图中最大的矩形(单调递增栈)

1. 题目 题目链接 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。 图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。 2. 解题 单调递增栈,遇到递减的进行处理,最后未处理完的,在末尾加个0(遇到递减了,处理剩余的) 栈内左侧的都比栈顶小,当前的也比其小,那么以栈顶为高的矩形能够扩展的宽度就知道了,宽度 =

Michael是个半路程序员 2562

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【栈】Leetcode 84. 柱状图中最大的矩形【困难】

时间复杂度:O(n),其中n为柱状图的高度数组heights的长度。因为需要遍历柱状图的高度数组一次。给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1。空间复杂度:O(n),使用了一个额外的栈来存储柱子的索引。求在该柱状图中,能够勾勒出来的矩形的最大面积。:最大的矩形为图中红色区域,面积为 10。

FLGB 821

leetcode 84. 柱状图中最大的矩形 栈

定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为[2,1,5,6,2,3]。 图中阴影部分为所能勾勒出的最大矩形面积,其面积为10个单位。 示例: 输入: [2,1,5,6,2,3] 输出: 10 通过维护一个递增栈。 如果此时存放下标[1,2,3].来了下标为4,也就是值为2.此时2<6. 首先要以6为最...

Little_boy_z的博客 206

LeetCode 84. 柱状图中最大的矩形——Python实现(栈)

# -*- coding: utf-8 -*- """ @File : largest_rectangle_area.py @Author: zhang_san @Time : 2020/9/13 10:31 @des : 题目:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为1。求在该柱状图中,能够勾勒出来的矩形的最大面积。 思路:使用栈的方式。因为柱状图的下边界是固定的,所以求柱状图中的矩形面积,其实是求以每一个柱高为上边界,可以形成的矩形的面.

u011412768的博客 436

LeetCode-84. 柱状图中最大的矩形【栈 数组 单调栈】

情况三:当前遍历的元素heights[i]小于栈顶元素heights[st.top()]的情况【计算当前ans=(i - stack[-1] - 1) * heights[stack[-1]】如果数组本身是降序的,例如 [8,6,4,2],在 8 入栈后,6 开始与8 进行比较,此时我们得到 mid(8),rigt(6),但是得不到 left。如果数组本身就是升序的,例如[2,4,6,8],那么入栈之后 都是单调递减,一直都没有走 情况三 计算结果的哪一步,所以最后输出的就是0了。时间复杂度:O(n)

zik的博客 571

(nice!!!)(LeetCode 热题 100)84. 柱状图中最大的矩形(栈)

【代码】(nice!!!)(LeetCode 热题 100)84. 柱状图中最大的矩形(栈)

记录一些刷过的题并分享学习心得 480

栈 | 单调栈 :力扣84. 柱状图中最大的矩形

1、题目描述: 2、题解: 方法1:单调栈 思路: 设定一个栈,保存数组的下标(遍历过程中,顶底到栈顶的值所对应的heights数组中的值是递增的。) 把原数组的前后增加0值,这样后面就不用判断栈是否是空 然后循环遍历数组: 循环处理,如果当前的高度小于栈顶所对应heights数组的的值: 取出栈顶元素,计算取出的栈顶元素所对应的heighs值h 计算宽度:distance = i - stack[-1] - 1 更新res,res = max(r

weixin_42042056的博客 275

OJ练习第101题——柱状图中最大的矩形

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。

weixin_45662626的博客 679

leetcode - [栈] -柱状图中的最大矩形(84)

1、问题描述 给定n个非负整数,用来表示柱状图中每个柱子的高度。每个柱子彼此相邻,且宽度为1. 求柱状图中能勾勒出的最大面积。 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。 图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。 2、解题思路 方法1:暴力法。在柱子iii和柱子jjj构成的区间中,最大的矩形面积为区间长度*区间内最矮柱子的高...

Olivaf的博客 195

LeetCode题解:84. 柱状图中最大的矩形,使用栈,JavaScript,详细注释

原题链接:https://leetcode-cn.com/problems/largest-rectangle-in-histogram/ 解题思路: 参考了官方题解中的方法二:单调栈 + 常数优化。 将元素入栈,当遇到待入栈元素小于栈顶时,就将栈中元素依次弹出,直到栈顶比入栈元素小为止。 通过第一步的操作,就保证了栈是有小到大排序。 当入栈元素比栈顶小时,入栈元素即为右边界,栈顶为高,栈顶的下一个元素为左边界,即可计算面积。 当所有元素都完成入栈操作后,如果栈中还有元素,则需要以此将栈中元素依次弹出计算

Lee Chen的博客 156

LeetCode第84题:柱状图中最大的矩形

LeetCode第84题题目详述解法一解法二解法三 题目详述 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。 图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。 解法一 暴力法。时间复杂度:O(n^3)...

weixin_42610002的博客 317
上一篇: AP聚类算法
下一篇: leetcode(85)最大矩形——转化为84题
softwareX4
博客等级 码龄9年 21粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值