当前位置: 首页 > article >正文

最大矩形面积 (赛博朋克版) —— 单调栈经典两次遍历法

题目描述赛博朋克巨幅霓虹广告【题目背景】在霓虹闪烁的夜之城林立的高楼大厦构成了一道参差不齐的城市天际线。为了迎接即将到来的“星际狂欢节”超级巨头“荒坂科技”计划在市中心的一排建筑外墙上挂起一块史无前例的巨幅矩形全息霓虹广告牌。【题目详情】市中心共有n栋紧挨着的大楼排成一列。已知第i栋大楼的高度为h[i]。每栋大楼的宽度均可以视为1。为了保证广告牌的平整和安全这块巨幅矩形广告牌必须紧贴着大楼的表面安装且广告牌的任何部分都不能超出其所覆盖大楼的高度也就是说如果广告牌跨越了多栋大楼它的最高点受限于这些大楼中最矮的那一栋。请计算出这块全息霓虹广告牌的最大可能面积。【输入格式】第一行包含一个整数n表示大楼的总数。 第二行包含n个整数h[1],h[2], ..., h[n]相邻两个数之间用单个空格隔开表示从左到右每栋大楼的高度。【输出格式】输出一行包含一个整数表示这块全息霓虹广告牌的最大可能面积。【样例输入】7 2 4 4 6 4 3 1【样例输出】16【样例解释】选择第 2、3、4、5 栋大楼它们的高度分别是 4, 4, 6, 4。如果广告牌跨越这四栋大楼高度最高只能取决于最矮的大楼高度为4。 此时广告牌的宽度为4高度为4总面积为 4*416。这是所有可能方案中面积最大的一种。(注如果选第1到6栋大楼高度受限于最矮的 2宽度为6面积为12不如16 大。)【数据范围】对于100%的数据保证1n 2000001h[i] 10^9。题目分析本题是一道非常经典的算法题同 LeetCode 84柱状图中最大的矩形。核心切入点任何一个矩形它的高度一定是由构成这个矩形的最矮的那根柱子决定的。 因此我们可以转换思路枚举每一根柱子假设它是最终矩形中最矮的那根即矩形的高度就是这根柱子的高度那么这个矩形能向左、向右延伸多远向右延伸的极限遇到右边第一个比它矮的柱子就得停下。向左延伸的极限遇到左边第一个比它矮的柱子就得停下。只要帮每根柱子找到这两个边界算出宽度再乘以它自己的高度就能求出以它为高度的最大面积。最后在所有柱子算出的面积中取最大值即可。思考过程与算法设计为了逻辑最清晰、最不易出错我们采用单调栈的两次遍历策略第一步从左向右扫描找右边界r[i]维护一个存储下标的单调栈栈底到栈顶对应的高度严格递增。当遍历到第i根柱子时如果它的高度小于栈顶柱子的高度说明第i根柱子就是栈顶柱子“右边第一个比它矮的”。记录r[s.top()]i并将栈顶弹出。遍历结束后栈里剩余元素的右边界假定在数组最右侧的外面即n1。第二步从右向左扫描找左边界l[i]清空栈使用完全相同的逻辑只不过循环方向变成从n到1。如果当前柱子矮于栈顶说明当前柱子是栈顶柱子“左边第一个比它矮的”。记录l[s.top()]i。遍历结束后栈里剩余元素的左边界假定在数组最左侧的外面即0。第三步计算面积遍历所有柱子计算以第i根柱子为高的矩形宽度宽度r[i]-l[i]- 1。计算面积并更新全局最大值。时空复杂度分析时间复杂度O(n)。寻找右边界时每根柱子最多入栈一次、出栈一次寻找左边界时同理。两次遍历的总操作次数与n呈线性关系。最后的面积计算也是O(n)。空间复杂度O(n)。使用了三个大小为n的数组h,l,r以及一个单调栈空间占用随n线性增长。易错点总结溢出题目中高度最大可达10^9宽度最大可达200000。最坏情况下最大面积为2* 10^14这远远超过了32位int的上限约2.1*10^9。高度数组h和记录最大面积的变量ma必须使用long long。边界的设定宽度计算公式是r[i]-l[i]-1。为了保证公式在找不到更矮柱子时依然成立必须将找不到右边界的r设为n1找不到左边界的l设为0。完整代码//最大矩形面积 #include iostream #include stack #include algorithm//对应max using namespace std; int n; long long h[200010];//每一列格子涂色的高度 stackint s;//单调栈 存放下标 int l[200010];//l[i]代表i左边第一个高度小于它的格子的下标 int r[200010];//r[i]代表i右边第一个高度小于它的格子的下标 int main(){ ios::sync_with_stdio(false); cin.tie(0); cinn; for(int i1;in;i) cinh[i]; //先找每个格子右边第一个高度小于它的格子的下标 for(int i1;in;i){ //如果栈非空 且当前格子高度矮于栈顶格子 while(!s.empty()h[i]h[s.top()]){ r[s.top()]i;//栈顶格子右边第一个比栈顶格子矮的格子的下标记录下来 s.pop();//栈顶格子出栈 } //当栈为空或当前格子高度大于等于栈顶格子 //入栈 s.push(i); } //栈内最后剩下的格子都是右边没有比他们矮的格子所以记录为n1最后一个格子后面 while(!s.empty()){ r[s.top()]n1; s.pop(); } //先找每个格子左边第一个高度小于它的格子的下标 for(int in;i1;i--){ //如果栈非空 且当前格子高度矮于栈顶格子 while(!s.empty()h[i]h[s.top()]){ l[s.top()]i;//栈顶格子左边第一个比栈顶格子矮的格子的下标记录下来 s.pop();//栈顶格子出栈 } //当栈为空或当前格子高度大于等于栈顶格子 //入栈 s.push(i); } //栈内最后剩下的格子都是左边没有比他们矮的格子所以记录为0第一个格子前面 while(!s.empty()){ l[s.top()]0; s.pop(); } long long ma0;//记录最大面积 //遍历所有各自计算最大面积 for(int i1;in;i){ mamax(ma,(r[i]-l[i]-1)*h[i]); } coutma; return 0; }

相关文章:

最大矩形面积 (赛博朋克版) —— 单调栈经典两次遍历法

题目描述:赛博朋克:巨幅霓虹广告【题目背景】 在霓虹闪烁的夜之城,林立的高楼大厦构成了一道参差不齐的城市天际线。为了迎接即将到来的“星际狂欢节”,超级巨头“荒坂科技”计划在市中心的一排建筑外墙上,挂起一块史无…...

7种常见鸟类分类图像数据集分享(适用于目标检测任务已划分)

7种常见鸟类分类图像数据集分享(适用于目标检测任务已划分) 数据集获取 链接:https://pan.baidu.com/s/1u1TumqmOpCpzeqTC-JfSOw?pwdyrvq 提取码:yrvq 复制这段内容后打开百度网盘手机App,操作更方便哦 鸟类是自然生态系统中最具代表性的动…...

PAT 乙级 1103

依旧简单的一集。我发现 map 好好用&#xff0c;连压栈都不需要&#xff0c;可以直接写。#include<bits/stdc.h> using namespace std;int main() {int m, n;cin >> m >> n;int b 0, flag 0;map<int, int> mapp;for(int a m; a < n; a ) {int d …...

PAT 乙级 1108

依旧简单的一集。这个题应该是前面有重复的题&#xff0c;那个题好像是输出Pat吧&#xff0c;记不太清楚了。#include<bits/stdc.h> using namespace std;int main() {string s;cin >> s;map<char, int> mapp;for(int i 0; i < s.size(); i )mapp[s[i]] …...

vosk-ASR asterisk调用[AI人工智能(五十三)]—东方仙盟

核心代码 目录结构 完整代码python #!/usr/bin/python3from asterisk.agi import * import os from websocket import create_connection import json import tracebackAUDIO_FD 3 CONTENT_TYPE audio/l16; rate8000; channels1 ACCEPT audio/pcmdef process_chunk(agi, ws…...

vosk-ASR angular调用[AI人工智能(五十二)]—东方仙盟

核心代码目录结构代码import { Component } from angular/core; import { ElementRef, ViewChild} from angular/core import { DictateService } from "./dictate-service";Component({selector: app-root,templateUrl: ./app.component.html,styleUrls: [./app.com…...

OpenClaw安全防护:从威胁认知到工程化加固

OpenClaw安全防护&#xff1a;从威胁认知到工程化加固⚠️ 为什么需要单独一章讲安全&#xff1f; 截至2026年3月&#xff0c;全球已有超过27万个OpenClaw实例暴露在公网上&#xff0c;ClawHub市场累计发现超过1184个恶意Skills&#xff0c;国家互联网应急中心&#xff08;CNCE…...

opencv中,把图片变成灰度图有什么用

在 OpenCV 和计算机视觉中&#xff0c;把彩色图片变成灰度图&#xff08;Grayscale&#xff09;绝不仅仅是为了“怀旧”或“好看”&#xff0c;它有着非常硬核的工程价值和数学优势。 简单来说&#xff0c;它的核心作用可以概括为三个词&#xff1a;降维、去噪、提效。 以下是详…...

AI驱动的8款工具能高效简化论文写作,自动完成目录生成与内容结构调整

工具对比速览 工具名称 核心功能 处理速度 适用场景 特色优势 aibiye AI降重目录生成 20分钟 学术论文 知网/维普/格子达适配 aicheck AI检测目录优化 实时 初稿检查 多平台规则预判 askpaper 学术规范处理 15-30分钟 期刊投稿 保留专业术语 秒篇 一键式处…...

7个AI论文降重工具实测,改写效果与适用场景解析

AIGC检测功能展示 降AIGC效果 必知&#xff01;7个AI降重排名&#xff0c;助论文通过 还在为论文查重率发愁&#xff1f;随着学术规范日益严格&#xff0c;查重和AIGC检测成为论文通过的硬性门槛。别担心&#xff0c;AI降重工具来拯救你&#xff01;经过实测对比&#xff0c;…...

论文降重神器盘点:7款AI工具实测效果与使用建议

AIGC检测功能展示 降AIGC效果 必知&#xff01;7个AI降重排名&#xff0c;助论文通过 还在为论文查重率发愁&#xff1f;随着学术规范日益严格&#xff0c;查重和AIGC检测成为论文通过的硬性门槛。别担心&#xff0c;AI降重工具来拯救你&#xff01;经过实测对比&#xff0c;…...

去中心化AI系统:架构师必须知道的共识

去中心化AI系统&#xff1a;架构师必知的共识机制设计与实践 副标题&#xff1a;从分布式一致性到AI协同&#xff0c;拆解核心逻辑与落地要点 摘要/引言 当我们谈论AI的未来时&#xff0c;去中心化正在成为破局中心化AI痛点的关键方向——你是否遇到过这些问题&#xff1f; 中心…...

企业AI风险防控体系的敏捷设计:AI应用架构师的实战方法

企业AI风险防控体系的敏捷设计&#xff1a;AI应用架构师的实战方法 引言&#xff1a;AI时代的风险之痛&#xff0c;需要“敏捷”的解药 痛点引入&#xff1a;AI项目的“风险陷阱”你踩过吗&#xff1f; 作为AI应用架构师&#xff0c;你可能经历过这些崩溃瞬间&#xff1a; 模型…...

金三银四已到,Java就业压力为啥还没缓解?

今年金三银四快到了&#xff0c;但是大家就业压力却没有缓解多少。很多粉丝后台留言&#xff0c;Java程序员面临的竞争太激烈了……我自己也有实感&#xff0c;多年身处一线互联网公司&#xff0c;虽没有直面过求职跳槽的残酷&#xff0c;但经常担任技术面试考官&#xff0c;对…...

普通Java程序员如何快速上手性能调优?

性能优化可以说是很多一线大厂对其公司内高级开发的基本要求&#xff08;其中以Java岗最为显著&#xff09;。其原因有两个&#xff1a;一是提高系统的性能&#xff0c;二是为公司节省资源。两者都能做到&#xff0c;那你就不可谓不是普通程序员眼中的“调优大神了”。那么如何…...

阿里最新SpringBoot进阶笔记,2026快速上手突击必备!

相信从事Java开发的朋友都听说过SSM框架&#xff0c;老点的甚至经历过SSH&#xff0c;说起来有点恐怖&#xff0c;比如我就是经历过SSH那个时代未流。当然无论是SSM还是SSH都不是今天的重点&#xff0c;今天要说的是Spring Boot&#xff0c;一个令人眼前一亮的框架&#xff0c;…...

IT界有哪些优秀的高并发解决方案?

据有关数据表明&#xff0c;现在基本工作年限超过5年的Java开发岗以及各大厂招聘岗位&#xff0c;对于高并发这块内容是必定会考察的。这也就意味着&#xff0c;你想要在今年这个大环境下&#xff0c;找到一份薪水高且发展前景好的岗位&#xff0c;不关基础知识还要有良好的编码…...

Unity平台跳跃游戏开发利器:Platformer Project 技术架构深度解析

在游戏开发领域&#xff0c;平台跳跃&#xff08;Platformer&#xff09;一直是一个经典且充满魅力的游戏类型。从《超级马里奥》到《索尼克》&#xff0c;再到各种现代3D平台游戏&#xff0c;核心玩法始终围绕着精准的移动控制、复杂的地形互动以及丰富的角色技能展开。然而&a…...

OpenClaw-龙虾智能体-新手入门必看,一文搞懂核心定义与应用场景

OpenClaw&#xff08;龙虾&#xff09;智能体&#xff1a;新手入门必看&#xff0c;一文搞懂核心定义与应用场景&#x1f4da; 本章学习目标&#xff1a;深入理解OpenClaw&#xff08;龙虾&#xff09;智能体的核心概念与实践方法&#xff0c;掌握关键技术要点&#xff0c;了解…...

【从零学javase 第六天】网络编程(+多线程)

Java 网络编程实战教程&#xff1a;从零基础到群聊本文适合刚会 Java 的同学&#xff0c;带你从零基础学 Java 网络编程&#xff0c;最终实现多客户端群聊。一、网络编程基础概念 网络编程就是用程序让两台电脑互相传递信息。 IP 地址&#xff1a;电脑的网络位置&#xff0c;例…...

AI 批量图片去水印工具 v1.0.0 - 豆包专属去水印

豆包 AI 图片批量去水印工具 v1.0.0&#xff0c;是 AI 驱动的高效批量去水印神器&#xff0c;可自动批量处理图片水印&#xff0c;搭配教学视频与专属插件简化操作流程&#xff0c;助力用户轻松完成图片去水印工作。软件核心介绍基础功能&#xff1a;依托 AI 技术实现图片批量去…...

【实证分析】上市公司债务融资成本数据-含代码(2006-2024年)

数据简介&#xff1a;上市公司债务融资成本是指上市公司通过债务形式&#xff08;如银行信贷、发行债券、融资租赁等&#xff09;融入资金时&#xff0c;需要支付给债权人的费用或代价。这一成本是企业为获取债务资本而必须承担的支出&#xff0c;对企业的财务状况和经营成果具…...

Java 后端实现 token自动续期,这方案有点优雅!

在前后端分离的开发模式下&#xff0c;前端用户登录成功后后端服务会给用户颁发一个token。前端(如vue)在接收到 token后会将token存储到LocalStorage中。后续每次请求都会将此token放在请求头中传递到后端服务&#xff0c;后端服务会有一个过滤器对token进行拦截校验&#xff…...

11 张图总结下,微服务增量拉取

一、前言 上一篇我们讲解了客户端首次获取注册表时&#xff0c;需要从注册中心全量拉取注册表到本地存着。那后续如果有客户端注册、下线的话&#xff0c;注册表肯定就发生变化了&#xff0c;这个时候客户端就得更新本地注册表了&#xff0c;怎么更新呢&#xff1f;下面我会带…...

线程池里的代码明明报错了,为什么控制台一行异常日志都不打?

昨天下午&#xff0c;运营说有个用户标签更新任务没跑&#xff0c;后台数据全是旧的&#xff01;这个任务我前两天才优化过&#xff0c;逻辑很简单&#xff0c;就是从数据库查一批人&#xff0c;算一下标签&#xff0c;再写回去。为了快点&#xff0c;我还特意用了线程池做并发…...

十万个why:Nacos 服务注册为什么默认是临时实例?

做 Spring Cloud 开发的同学&#xff0c;对 Nacos 肯定不陌生。大家平常写代码&#xff0c;配置文件里只要配好 Nacos 地址&#xff0c;程序一启动&#xff0c;服务就自动注册上去了。但不知道大家有没有留意过一个细节&#xff1a;当你把服务停掉&#xff0c;或者直接 Kill 进…...

词向量做句子相似度已经落伍?深度解析词移距离(WMD)为何能成为语义匹配新宠!

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;如何度量两个句子的语义相似度是一个基础且重要的问题。无论是智能客服、搜索引擎&#xff0c;还是文本去重、问答系统&#xff0c;都离不开快速准确的相似度计算。尤其是在工业界实时场景中&#xff08;比如语音助手…...

华为CE6800交换机堆叠配置案例

新到了2台华为CE6857交换机&#xff0c; 需要配置堆叠 硬件型号&#xff1a;CE6857F-48S6CQ 示例拓扑&#xff1a;实际物理拓扑配置思路 采用如下的思路配置&#xff1a; 提前规划好堆叠方案。按照前期的规划&#xff0c;完成各台交换机的堆叠配置&#xff0c;包括堆叠成员ID、…...

5 个正在爆火的开源AI工具

在过去的 60 天里,一个名为 OpenClaw 的开源 AI 项目超越了 React,成为 GitHub 历史上获得最多星标的软件项目,累计获得超过 30 万颗星,揭示了向开发者现在所说的"智能体执行"的巨大转变。但 OpenClaw 已经太大了,不适合被低估。当科技媒体争相报道同样的五个项目时,…...

应该使用AI构建内部工具吗?

这是我目前发现的最有趣的讨论之一。这是关于你是否应该使用人工智能来构建自己的内部工具。 Chamath 在大约 6 周内构建了自己的 JIRA 工具。 我们的hacker团队刚刚使用 Software Factory 在一个多月内重建并替换了 Jira。我们首先花了 3.5 周的时间进行规划。这就是软件工厂…...