【C++单调栈】962. 最大宽度坡|1607

本文涉及的基础知识点

C++单调栈

LeetCode962. 最大宽度坡

给定一个整数数组 A,坡是元组 (i, j),其中 i < j 且 A[i] <= A[j]。这样的坡的宽度为 j - i。
找出 A 中的坡的最大宽度,如果不存在,返回 0 。
示例 1:
输入:[6,0,8,2,1,5]
输出:4
解释:
最大宽度的坡为 (i, j) = (1, 5): A[1] = 0 且 A[5] = 5.
示例 2:
输入:[9,8,1,0,1,9,4,0,4,1]
输出:7
解释:
最大宽度的坡为 (i, j) = (2, 9): A[2] = 1 且 A[9] = 1.
提示:
2 <= A.length <= 50000
0 <= A[i] <= 50000

单调栈

如果i1<i2,且A[i1] <= A[i2], ∀ \forall j ,j >i2,(i2,j)一定不是最优坡,因为(i1,j)更优。
故:只有nums[i] 小于栈顶元素才可能是最优i。这样栈底到栈顶是严格降序。
j从大到小枚举nums[j],
从栈顶到栈底,只有一个nums[stack.top()] <= nums[j] ,便是j的最优i,令其为i1。i1被j出栈不会影响(i1,x),i1被j出栈说明,不存在(i1,x) 且x > j的解。 x< j的解,显然劣于(i1,j)

代码

核心代码

class Solution {public:int maxWidthRamp(vector<int>& nums) {vector<int> sta = { 0 };for (int i = 1; i < nums.size(); i++) {if (nums[i] < nums[sta.back()]) {sta.emplace_back(i);}}int ret = 0;for (int i = nums.size() - 1; i >= 0; i--) {while (sta.size() && (nums[sta.back()] <= nums[i])) {ret = max(ret, i - sta.back());sta.pop_back();}}return ret;}};

单元测试

vector<int> nums;TEST_METHOD(TestMethod11){nums = { 6,0,8,2,1,5 };auto res = Solution().maxWidthRamp(nums);AssertEx(4, res);}TEST_METHOD(TestMethod12){nums = { 9,8,1,0,1,9,4,0,4,1 };auto res = Solution().maxWidthRamp(nums);AssertEx(7, res);}

扩展阅读

我想对大家说的话
工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。
学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作
有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注
闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛
失败+反思=成功 成功+反思=成功

视频课程

先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

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

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

相关文章

免费的GB28181设备端EasyGBD,支持国标GB28181-2016和国标GB28181-2022,支持各种ARM系统、国产芯片、信创芯片

现在市面上还有很多卖国标GB28181设备端SDK的&#xff0c;EasyGBD免费的&#xff0c;基于C/C开发的国标GB28181设备库。 技术规格 编程语言&#xff1a;C/C&#xff0c;能适配任何平台&#xff0c;包括但不限于Windows、Linux、Android、ARM视频编解码器&#xff1a;H264、H26…

MPL助力固态前驱体光刻胶,图案化金属氧化物半导体更精密

大家好&#xff01;今天来了解一项金属氧化物增材制造研究——《Ultra-high precision nano additive manufacturing of metal oxide semiconductors via multi-photon lithography》发表于《nature communications》。在现代电子信息领域&#xff0c;金属氧化物半导体至关重要…

【031】基于SpringBoot+Vue实现的在线考试系统

文章目录 系统说明技术选型成果展示账号地址及其他说明源码获取 系统说明 基于SpringBootVue实现的在线考试系统是为高校打造的一款在线考试平台。 系统功能说明 1、系统共有管理员、老师、学生三个角色&#xff0c;管理员拥有系统最高权限。 2、老师拥有考试管理、题库管理…

mpu6050 设置低功耗模式

mpu6050 电源管理寄存器&#xff0c;参考博客&#xff1a;MPU6050学习笔记&#xff08;电源管理器1、2&#xff09; - LivingTowardTheSun - 博客园 (cnblogs.com) 根据手册&#xff0c;设置对应的寄存器即可&#xff1b; 具体代码&#xff1a; #define MPU_PWR_MGMT1_REG …

111.SAP ABAP - Function ALV - 列、行、单元格颜色 - 记录

目录 1.介绍 2.列背景色 3.行背景色 4.单元格背景色 4.1颜色码相关的结构 LVC_T_SCOL LVC_S_SCOL LVC_S_COLO 4.2单元格颜色设置方法 5.ALV 颜色码 1.介绍 在数据展示方面&#xff0c;要求ALV的数据列、行、单元格通过颜色醒目显示&#xff08;颜色展示…

【01】ZooKeeper特性与节点数据类型

1、Zookeeper介绍 ZooKeeper是一个开源的分布式协调框架&#xff0c;是Apache Hadoop 的一个子项目&#xff0c;主要用来解决分布式集群中应用系统的一致性问题。Zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来&#xff0c;构成一个高效可靠的原语集&…

掌控板micropython编程实现OLED中显示汉字

掌控板micropython编程实现OLED中显示汉字 1. 介绍 在ESP32中显示中文有很多种办法&#xff0c;例如&#xff0c;使用支持汉字的固件&#xff08;https://blog.csdn.net/weixin_42227421/article/details/134632037&#xff09;&#xff1b;使用PCtoLCD2002软件生成自定义字体…

apache poi导出excel

简介 常见的使用场景 入门 导入maven依赖 <!-- poi --> <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId> </dependency> <dependency><groupId>org.apache.poi</groupId><arti…

机器视觉:9点标定的原理与实现

一、什么是标定 标定就是将机器视觉处理得到的像素坐标转换成实际项目中使用到的毫米坐标。简单说即使看看实际单位距离内有几个像素&#xff0c;如下图所示&#xff0c;10mm的距离内有222个像素&#xff0c;那像素坐标和实际的毫米坐标就有个比例关系了。 二、九点标定 9点标…

【万能软件篇】03-Batchplot_setup_3.5.6(CAD批量打印插件)

批量打印插件&#xff08;Batchplot&#xff09;简介 Batchplot是一个专门针对AutoCAD2000以上版本设计的单DWG多图纸的批量生成布局、批量打印、批量分图工具。自行判定的图框位置与尺寸&#xff0c;根据当前的打印机设置&#xff0c;自动调整打印的方式&#xff0c;实现批量生…

2024 AFS-46 电子数据存在性鉴定(移动终端)(2024能力验证)

一、委托事项 1.给出检材手机的MEID。 2.给出检材手机在2024年7月3日上午连接过的设备名称。 3.给出检材手机中kimi应用最近一次被中断回答的问题内容。 4.给出检材手机中安装过的即时通讯应用的包名&#xff08;不包含虚拟机中的应用&#xff09;。 5.检材手机中安装有几…

C#与C++交互开发系列(十一):委托和函数指针传递

前言 在C#与C的互操作中&#xff0c;委托&#xff08;delegate&#xff09;和函数指针的传递是一个复杂但非常强大的功能。这可以实现从C回调C#方法&#xff0c;或者在C#中调用C函数指针的能力。无论是跨语言调用回调函数&#xff0c;还是在多线程、异步任务中使用委托&#x…

《数字图像处理基础》学习03-图像的采样

在之前的学习中我已经知道了图像的分类&#xff1a;物理图像和虚拟图像。《数字图像处理基础》学习01-数字图像处理的相关基础知识_图像处理 数字-CSDN博客 目录 一&#xff0c;连续图像和离散图像的概念 二&#xff0c;图像的采样 1&#xff0c; 不同采样频率采样同一张图…

Linux系统基础-多线程超详细讲解(1)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 Linux系统基础-多线程超详细讲解(1) 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 …

QGIS提取面的顶点坐标到属性表

相关参考&#xff1a;QGIS中提取面的中心坐标到属性表-CSDN博客 polygon_layer QgsProject.instance().mapLayersByName("Polygon")[0]polygon_layer.startEditing() polygon_layer.dataProvider().addAttributes([QgsField("coors", QVariant.String, le…

面向对象编程中类与类之间的关系(二)

目录 1.引言 2.泛化&#xff08;继承&#xff09;关系 3.实现关系 4.聚合关系 5.组合关系 6.依赖关系 7.关联关系 7.1. 单向关联 7.2. 双向关联 7.3.自关联 8.总结 1.引言 在面向对象设计模式中&#xff0c;类与类之间主要有6种关系&#xff0c;他们分别是&#xff…

Android Studio安装完成后,下载gradle-7.4-bin.zip出现连接超时

文章目录 问题原因&#xff1a;因为下载镜像是谷歌&#xff0c;属于外网&#xff0c;不好正常连接&#xff0c;下载依赖。解决方法&#xff1a;找到gradle-wrapper.properties文件&#xff0c;修改镜像&#xff0c;如下图&#xff0c;然后再单击try again重新下载。 问题原因&a…

[论文阅读]Constrained Decision Transformer for Offline Safe Reinforcement Learning

Constrained Decision Transformer for Offline Safe Reinforcement Learning Proceedings of the 40th International Conference on Machine Learning (ICML), July 23-29, 2023 https://arxiv.org/abs/2302.07351 泛读只需要了解其核心思想即可。 安全强化学习(Safe Rei…

解决 IntelliJ IDEA 中使用 Lombok 编译报错的几种方法

目录 引言 常见的 Lombok 编译错误 解决方法 方法一&#xff1a;确保最新版本 Lombok 库已添加到项目依赖 方法二&#xff1a;检查 IDEA 的编译器设置 方法三&#xff1a;安装并启用 Lombok 插件 方法四&#xff1a;配置 Lombok 注解处理器 方法五&#xff1a;检查 Lom…

基于熵权法的TOPSIS模型

基于熵权法的TOPSIS模型 1. 简介 数学建模可以结合 熵权法 和 T O P S I S TOPSIS TOPSIS 法各自的特点&#xff0c;进行评价&#xff0c;这种组合模型的使用在数学建模比赛中使用的非常多。 在 2023 美赛 O 奖中就有使用该方法的&#xff0c;往年国赛国奖中也有 2. 熵权法介…