【代码随想录算法训练Day55】LeetCode 42.接雨水、LeetCode 84. 柱状图中最大的矩形

Day55 单调栈第二天

LeetCode 42.接雨水

典中典题目,我们还是运用了单调栈的思路,在大的一侧入栈时记录下标,右边界就是当前入栈元素,底就是栈顶元素,左边界就是左边最近的比栈顶大的值,也就是栈顶元素的下一个元素。
底边就是左右边界的下标差再减1,高就是左右边界高的最小值,这样操作当有连续相同高度是也可入栈,出栈时高度取最小值,也就是0,不必担心重复计算。

class Solution {
public:int trap(vector<int>& height) {stack<int> st;st.push(0);int sum=0;for(int i=1;i<height.size();i++){while(!st.empty() && height[i]>height[st.top()]){int mid=st.top();st.pop();if(!st.empty()){int h=min(height[st.top()],height[i])-height[mid];int w=i-st.top()-1;sum+=h*w;}}st.push(i);}return sum;}
};

LeetCode 84. 柱状图中最大的矩形

与上一道接雨水遥相呼应。
我们这里要求的是相邻的第一个比该元素小的元素,那么我们获得的就是矩形向左向右扩展时的边界,然后的思路就与接雨水相似了。
这里有一些关键的点,在数组末尾加一个0,这样可以防止全递增序列无法触发计算逻辑,然后在栈里提前加入一个0,这样如果是递减序列,也能让第一个元素成功进入计算。

class Solution {
public:int largestRectangleArea(vector<int>& heights) {int res=0;stack<int> st;heights.insert(heights.begin(),0);heights.push_back(0);st.push(0);for(int i=1;i<heights.size();i++){if(heights[i]>heights[st.top()])st.push(i);else if(heights[i]==heights[st.top()]){st.pop();st.push(i);}else{while(!st.empty() && heights[i]<heights[st.top()]){int mid=st.top();st.pop();if(!st.empty()){int left=st.top();int right=i;int w=right-left-1;int h=heights[mid];res=max(res,w*h);}}st.push(i);}}return res;}
};

单调栈完结啦,接下来就是图论DLC了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/39508.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue报错:Module not found: Error: Can‘t resolve ‘less-loader‘ in ‘文件地址‘

原因&#xff1a;Webpack无法找到 less-loader 模块&#xff0c;但在<style langless></style>中进行使用。less-loader 是一个Webpack的加载器&#xff0c;它用于将less文件编译成CSS。如果Webpack无法解析这个加载器&#xff0c;它就无法处理less文件&#xff0c…

【STM32HAL库学习】通信方式:USART、IIC、SPI

通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统 通信接口区别 名称引脚双工时钟电平设备USARTTX、RX全双工异步单端点对点I2CSCL、SDA半双工同步单端多设备SPISCLK、MOSI、MISO、CS全双工同步单端多设备CANCAN_H、CAN_L半双工异步差分多设…

通过A/B测试优化返利App的功能设计

通过A/B测试优化返利App的功能设计 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 什么是A/B测试&#xff1f; A/B测试是一种通过对比两个或多个版本的产品或…

Halcon机器视觉定位--模板匹配

一 Halcon模板匹配归纳 二 形状匹配算子介绍 find_shape_model( Image ,//待搜索图像 ModelID, //模版图像 AngleStart, //起始角度 AngleExtent, //角度范围 MinScore, //最小匹配分数 NumMatches, //匹配数目 MaxOverlap, //重叠度 SubPixel, //搜索精度 Greediness ,//自信度…

【免费数字孪生平台】医院数据可视化的新选择

随着大数据、云计算、人工智能等技术的深度融合&#xff0c;医院数据智能化升级已成为推动医疗服务质量飞跃的关键力量。 医院作为守护生命健康的前沿阵地&#xff0c;每天处理着海量的医疗数据。从患者病历、检查结果到医疗设备运行状态、医疗资源分配&#xff0c;每一项数据都…

还用老气的Excel做报表?试试这款“免费”可视化工具,快速制作3D智慧社区!

随着科技的飞速发展&#xff0c;智慧社区已经成为现代城市管理的重要组成部分。作为这一领域的核心工具&#xff0c;3D智慧社区可视化大屏凭借其先进的技术和强大的功能&#xff0c;正在逐步改变我们的生活方式。今天给大家分享一个 基于山海鲸可视化开发的3D可视化大屏的案例—…

【哈尔滨等保测评标准解析】

哈尔滨信息安全等级保护测评&#xff08;等保测评&#xff09;标准解析如下&#xff1a; 一、总体概述 哈尔滨市在进行等保测评时&#xff0c;遵循国家统一的标准框架&#xff0c;并结合本省的实际情况&#xff0c;形成了具有地方特色的安全防护模式。等保测评的主要目的是确…

【kubernetes】常用命令

常用命令 [资源类型]&#xff1a; pod [po] node [no] service [svc] namespace [ns] deployment [deploy] 等等 # 查看资源 kubectl get [资源类型]# 创建pod kubectl run [pod名] --imagenginx# 创建服务&#xff1a;deployment kubectl create deployment [deploy名] --ima…

DFS练习

105 从前序与中序遍历序列构造二叉树 import java.util.HashMap; import java.util.Map;class TreeNode {int val;TreeNode left;TreeNode right;public TreeNode(int val) {this.val val;} }public class Letcode105 {public TreeNode bulidTree(int[] preOrder, int[] inOrd…

探囊取物之多形式登录页面(基于BootStrap4)

基于BootStrap4的登录页面&#xff0c;支持手机验证码登录、账号密码登录、二维码登录、其它统一登录 低配置云服务器&#xff0c;首次加载速度较慢&#xff0c;请耐心等候&#xff1b;演练页面可点击查看源码 预览页面&#xff1a;http://www.daelui.com/#/tigerlair/saas/pr…

上帝之眼(BEVSee):多相机间无需标定,将各自目标统一到同一坐标系下(代码开源,提供数据集)

Abstract 我们解决了一个新的问题&#xff0c;即在鸟瞰视角&#xff08;BEV&#xff09;中无需预先给定相机校准的多视角相机和目标注册问题。这将多视角目标注册问题提升到一个新的无需校准的阶段&#xff0c;从而极大地缓解了许多实际应用中的限制。然而&#xff0c;这是一个…

Unity 3D软件下载安装;Unity 3D游戏制作软件资源包获取!

Unity3D&#xff0c;它凭借强大的功能和灵活的特性&#xff0c;在游戏开发和互动内容创作领域发挥着举足轻重的作用。 作为一款顶尖的游戏引擎&#xff0c;Unity3D内置了先进的物理引擎——PhysX。这一物理引擎堪称业界翘楚&#xff0c;能够为开发者提供全方位、高精度的物理模…

认识软件测试

认识软件测试 软件测试能力要求一、软件测试的步骤1.需求2.测试点3.测试用例4.执行测试用例5.缺陷管理6.测试报告 一、测试用例&#xff08;test case&#xff09;**用例编写要素**&#xff1a; 测试用例设计方法1.等价类2.边界值3.判定表法4.场景法 软件测试能力要求 软件测试…

使用Java开发工具包有哪些优势

哈喽&#xff0c;大家好呀&#xff0c;淼淼又来和大家见面啦&#xff0c;Java是一门广泛应用于企业级应用、安卓开发、大数据处理等领域的编程语言&#xff0c;其强大的生态系统和卓越的跨平台能力离不开Java开发工具包&#xff08;Java Development Kit, JDK&#xff09;的支持…

Linux系统中交叉编译opencv库

目标&#xff1a;将opencv进行交叉编译&#xff0c;使其能在rk3326板子上运行使用。 环境&#xff1a; ubuntu&#xff1a;18.04 opencv:4.5.4 opencv源码从挂网下载&#xff1a;opencv源码下载地址 交叉编译链&#xff1a;gcc-arm-10.3-linux-gun 一.环境准备 1.交叉编译链我…

CVPR 最佳学生论文,一键启动「BioCLIP 生物分类的层次预测 Demo」,帮你快速识别生物种类

很多生物由于外形的相似程度较高&#xff0c;难以使用肉眼进行区分。美国俄亥俄州立大学、微软研究院、加州大学欧文分校、伦斯勒理工学院共同发布了「BioCLlP: A Vision Foundation Model for the Tree of Life」&#xff0c; 基于 TREEOFLIFE-10M 这样的大规模标记数据集&…

【面试系列】AI研究员高频面试题及详细解答

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…

Docker网桥的作用

文章目录 docker网桥如何创建和删除网桥创建网桥删除网桥关于简单创建网桥和复杂创建网桥的区别 docker网桥 Docker 网桥是一个虚拟网络设备&#xff0c;它的作用是在 Docker 容器和宿主机之间创建一个隔离的网络环境。具体来说&#xff0c;Docker 网桥充当了一个虚拟的交换机…

k8s笔记——Prometheus 中的Histogram指标

Histogram&#xff08;直方图&#xff09;是Prometheus中一种非常重要的度量类型&#xff0c;用于表示一段时间范围内数据的分布情况。以下是对Prometheus中Histogram的详细解释&#xff1a; 一、定义与基本概念 定义&#xff1a;Histogram是一种度量类型&#xff0c;用于表示…

el-config-provider在Vue3中自定义命名空间实现

一、场景 子应用使用微应用(qiankun)方式嵌入主应用时&#xff0c;如果主应用和子应用ElementUI版本不一致&#xff0c;可能会出现样式问题 二、实现 1、引入依赖sass、sass-loader npm install sass npm install sass-loader 2、创建element.scss 在src下创建/style/ele…