【单调栈】最大宽度坡

public int maxWidthRamp(int[] nums) {/*  此方法思路正确,但超时int n = nums.length;Deque<Integer> stack;int max = 0;for (int i = 0; i < n; i++) {stack = new LinkedList<>();stack.push(nums[i]);int j = i + 1;while (j < n) {stack.push(nums[j]);if (nums[j] >= nums[i] && stack.size() > max) {max = stack.size();}j++;}}return max == 0 ? 0 : max - 1;*//*** 单调栈, 栈中存储的是从nums[0]开始的递减序列的下标,这些递减序列就是栈底*          然后逆序遍历数组计算哪个坡度最宽即可。** 这里有个问题就是:为什么栈中代表的数据就是栈底呢?*     我们最后要求的最大的宽度坡一定是以这个序列中的某一个i为坡底的,我们反证一下:*     假设存在某个元素位置k不存在于上面的递减序列中,且有最大宽度j-k,*     这也就说明k位置的元素一定是小于k前面所有的元素的,否则就会有更长的宽度,*     但是既然k小于前面所有的元素,那么k就一定会被加入到该递减序列中,*     与假设矛盾,所以不存在k,解一定存在递减序列中**      以 [6, 1, 8, 2, 0, 5] 为例,可以带入试验。*/int n = nums.length;int max = 0;Deque<Integer> stack = new LinkedList<>();for (int i = 0; i < n; i++) {if (stack.isEmpty() || nums[stack.peek()] > nums[i]) {stack.push(i);}}for (int i = n - 1; i >= 0; i--) {while (!stack.isEmpty() && nums[stack.peek()] <= nums[i]) {int pos = stack.poll();max = Math.max(max,i - pos);}}return max;}

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

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

相关文章

已知两个链表L1和L2分别表示两个集合,其中元素递增排列。请设计一个算法,用于求出L1与L2的交集,并存放在L1链表中

已知两个链表L1和L2分别表示两个集合&#xff0c;其中元素递增排列。请设计一个算法&#xff0c;用于求出L1与L2的交集&#xff0c;并存放在L1链表中。 代码思路&#xff1a; 我们创建一个辅助链表L3&#xff0c;用于存储L1和L2链表的交集&#xff0c;用s遍历L3各个元素 用p和…

文件夹重命名:克服语言障碍,批量将中文文件夹名翻译成英文

随着全球化的不断深入&#xff0c;英语成为了世界上最广泛使用的语言。在日常生活和工作中&#xff0c;可能经常要将中文文件夹名翻译成英文&#xff0c;以便交流或满足特定需求。手动翻译文件夹名不仅耗时&#xff0c;还容易出错。那有什么方法可以快速、准确地批量将中文文件…

【Qt】判断QList链表内是否有重复数据

QList<int> listInt;listInt.push_back(1);listInt.push_back(1);listInt.push_back(2);listInt.push_back(3);qDebug().noquote() << listInt.toSet().toList();

【前端开发】Remix与Next.js

很容易&#xff0c;我们被问到的最大问题是&#xff1a; Remix与Next.js有何不同&#xff1f; 看来我们必须回答这个问题&#xff01;我们想直接而不带戏剧性地解决这个问题。如果你是Remix的粉丝&#xff0c;并且想开始在推特上对这篇文章做出沾沾自喜的反应&#xff0c;我们恳…

2019年8月15日 Go生态洞察:Go贡献者峰会2019回顾

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

IP代理的巨大潜力,为什么跨境业务需要它?

IP说简单不简单&#xff0c;说复杂也不复杂&#xff0c;打个比方&#xff0c;IP就好比我们上网的一个门牌号&#xff0c;每家每户都会有一个门牌号&#xff0c;而且是唯一的地址。而代理IP&#xff08;代理服务器&#xff09;是一个位于中间的服务器&#xff0c;充当客户端和目…

【C++】map与set

​&#x1f47b;内容专栏&#xff1a;C/C编程 &#x1f428;本文概括&#xff1a;关联式容器的介绍、set、multiset、map、multimap。 &#x1f43c;本文作者&#xff1a;阿四啊 &#x1f438;发布时间&#xff1a;2023.11.27 一、关联式容器的介绍 在之前C的学习之中&#xf…

STM32入门--看门狗

一、独立看门狗简介 STM32F10xxx内置两个看门狗&#xff0c;提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障&#xff1b;当计数器达到给定的超时值时&#xff0c;触发一个中断(仅适用于窗口型看…

VMware虚拟机网络配置详解

vmware为我们提供了三种网络工作模式&#xff0c;它们分别是&#xff1a;Bridged&#xff08;桥接模式&#xff09;、NAT&#xff08;网络地址转换模式&#xff09;、Host-Only&#xff08;仅主机模式&#xff09; 打开vmware虚拟机&#xff0c;我们可以在选项栏的“编辑”下的…

R语言实操记录——R包无法安装,报错:Warning in system(cmd) : ‘make‘ not found

R语言 R语言实操记录——R包无法安装&#xff0c;报错&#xff1a;Warning in system(cmd) : ‘make‘ not found 文章目录 R语言一、起因二、具体步骤2.1、确认问题源2.2、安装RTools2.3、与R(/Rstudio)绑定2.4、验证可行性 三、疑惑 一、起因 R语言在包的安装上是真的方便&…

【华为OD】统一考试C卷真题 100%通过: 传递悄悄话 二叉树遍历 C/C++实现

目录 题目描述&#xff1a; 示例1 解题思路&#xff1a; 代码实现&#xff1a; 题目描述&#xff1a; 给定一个二叉树&#xff0c;每个节点上站着一个人&#xff0c;节点数字表示父节点到该节点传递悄悄话需要花费的时间。 初始时&#xff0c;根节点所在位置的人有一个悄悄…

中兴交换机:DHCP的配置

一、配置说明 拓扑图 S1是中兴三层核心交换机&#xff0c;作为DHCP Server使用&#xff0c;同时作为网关&#xff0c;PC通过自动获取IP地址接入网络 注意事项&#xff1a; S1全局下需要配置&#xff1a;IP Pool&#xff0c;DHCP Policy&#xff0c;打开DHCP功能 S1接口下需…