leetcode 503.下一个更大的元素 | 独树一帜!单调栈登场!

题目链接:. - 力扣(LeetCode)

这道题目可以用暴力的办法写出来,只需要在数组nums后面再将元素粘到后面,在对数组里的每一个元素都进行分析就可以了,这里我们来说另外一种解法——单调栈

我们这里先定义一个栈st,因为我要求的是每一个元素的下一个比它大的元素,注意这里的两个词——”下一个“,”更大的“,下一个意味着我们还没有遍历到,比他大这里我们就考虑将我们的栈设定成一个单调递减的栈,为什么呢,每次遍历的时候,只要我当前遍历的这个元素大于我的栈顶元素,这说明什么,这是不是就意味着,这个元素,就是我们栈顶元素的下一个更大的元素,所以只要遇到比栈顶元素大的,就将该元素赋值到我们结果数组中栈顶元素所对应的位置,里我们不是用if条件判断,而是while循环不断地弹出栈顶元素,这样不断地递归的判断,注意这里有一个细节就是我们一开始是将结果数组里的所有的元素都赋初值为-1,因为题目中说了,如果说找不到比它更大的,就加个数组的值赋值为-1,还有就是这里我们的for循环的i的终止条件是i<2*n.因为他这里要求的是循环数组,所以吗还需要i%n的操作来避免数组下标的越界,来看具体的代码的实现

class Solution {
public:vector<int> nextGreaterElements(vector<int>& nums) {int n = nums.size();vector<int> ans(n,-1);stack<int> st;for (int i = 0; i < 2 * n; i++) {while (st.empty() == false && nums[st.top()] < nums[i%n]) {ans[st.top()] = nums[i%n];st.pop();}if (i < n) st.push(i);}return ans;}
};

首先就是遍历数组,在栈不为空时,这里还需要注意的一点是我栈储存的是数组下标的索引,当我的栈顶的元素小于我的当前遍历的元素的时候,就代表这个元素就是我要找的栈顶的目标元素,将该元素加入到结果数组中,然后将栈顶的元素弹出,while不断进行循环,直到元素不大于栈顶的元素的时候,此时就将该元素加入到栈里,当i<n时才加入元素到栈里,2n只是因为题目说是循环数组,这样方便处理,最后在for循环结束的时候,返回数组result即可。

以上就是我对这道题目的想法与理解!

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

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

相关文章

数据收集和数据分析

数据分析和收集是一个多步骤的过程&#xff0c;涉及到不同的方法和思维构型。 以下是一些常见的数据收集方法和数据分析的思维模式&#xff1a; ### 数据收集方法&#xff1a; 1. **调查问卷**&#xff1a; 通过设计问卷来收集定量或定性数据。&#xff08;质量互变规律里面…

MOD和DIV的区别说明

1.说明 div 是取 A/BC&#xff0c;得到是C的值&#xff1b; mod 是取 A/BC...D,得到余数D的值。 2.实践 A8,B3,C2,D2 A9,B3,C3,D0

13.1.k8s集群的七层代理-ingress资源(进阶知识)

目录 一、ingress概述 1.前言 2.问题 3.ingress资源 二、ingress-nginx是什么 三、ingress-nginx 实现原理 四、部署ingress-nginx 1.获取部署文件 ingress-nginx.yaml 2.部署ingress-nginx 3.检查部署是否成功 五、编写使用Ingress样例代码 1.Ingress资源对象yaml文…

【科研基础】PRML

文章目录 IntroductionSupervised / unsupervised learningOverfittingBayesianIntroduction Supervised / unsupervised learning P3 Overfitting p6 p9: For a given model complexity, the over-fitting problem become less severe as the size of the data set increa…

PhotoShop自动生成号码牌文件

1、说明 设计卡牌的时候&#xff0c;遇到自动生成编号&#xff0c;从01500到-02500&#xff0c;一个一个的手写&#xff0c;在存储保存成psd格式的文件&#xff0c;会很耗时。 下面将介绍如何使用ps自动生成psd格式的文件 2、使用excle生成数字 从01500到-02500 第一步&…

做现货白银模拟账户太爽,一做实盘就亏?

太多现货白银投资者有过这样的经历&#xff1a;自己做模拟账户的时候如鱼得水&#xff0c;盈利几乎手到拿来&#xff0c;实在爽得不要不要的&#xff0c;但在实盘操作中却常常面临亏损&#xff0c;甚至出现巨亏的情况。其实这主要是由于模拟交易与实盘交易之间存在显著的差异&a…

VBA技术资料MF166:提取某区域特定数据到工作表

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

python基础练习题

题目来自 白月黑羽 一.对象与数字对象 题目1 请大家写一行代码&#xff0c;计算并打印出 993 196 的和&#xff0c; 乘以 7 的积&#xff0c; 然后除以3 这行代码 先在Python交互式命令行中运行 再将代码存入文件&#xff0c;用Python解释器去执行该文件 题目2 请大…

Python武器库开发-武器库篇之Thinkphp5 SQL注入漏洞(六十六)

Python武器库开发-武器库篇之Thinkphp5 SQL注入漏洞&#xff08;六十六&#xff09; 漏洞环境搭建 这里我们使用Kali虚拟机安装docker并搭建vulhub靶场来进行ThinkPHP漏洞环境的安装&#xff0c;我们进入 ThinkPHP漏洞环境&#xff0c;可以 cd ThinkPHP&#xff0c;然后通过 …

3d怎么把歪的模型摆正?---模大狮模型网

在进行3D建模过程中&#xff0c;有时候会遇到模型出现歪曲或者旋转不正确的情况&#xff0c;这可能会影响到后续的设计和渲染效果。因此&#xff0c;学会将歪曲的模型摆正是一个非常重要的技巧。模大狮将介绍几种常用的方法&#xff0c;帮助您有效地将歪曲的3D模型摆正&#xf…

Python19 lambda表达式

在 Python 中&#xff0c;lambda 表达式是一个小型匿名函数&#xff0c;通常用于实现简单、单行的函数。lambda 函数可以接受任意数量的参数&#xff0c;但只能有一个表达式。 基本语法&#xff1a; lambda arguments: expression这里&#xff0c;arguments 是传递给 lambda …

精益思想在机器人开发中的应用体现

精益思想源于制造业&#xff0c;旨在通过消除浪费、优化流程、持续改进来提升企业竞争力。在机器人开发中&#xff0c;精益思想同样具有指导意义。它要求开发团队在需求分析、设计、制造、测试等各个环节中&#xff0c;不断追求精益求精&#xff0c;力求在降低成本的同时提升产…

微信小程序怎么使用JSON动画?

微信小程序怎么使用JSON动画&#xff1f; 前言&#xff1a; 在微信小程序中实现动画有很多种方式&#xff0c;今天主要讲JSON动画 css3动画jsAPI动画使用PAG素材做动画使用GIF播放动画使用JSON文件做动画 准备工作 JSON动画素材下载lottie-miniprogram插件创建微信小程序的…

.NET 一些常用的类型转换扩展

#region 转换为string /// <summary> /// 将object转换为string&#xff0c;若转换失败&#xff0c;则返回""。不抛出异常。 /// </summary> /// <param name"obj"></param> /// <r…

多路h265监控录放开发-(14)

首先创建一个新类XCalendar继承QCalendarWidget类&#xff0c;然后在UI视图设计器中把日历提升为XCalendar&#xff0c;通过这个函数自己设置日历的样式 xcalendar.h #pragma once #include <QCalendarWidget> class XCalendar :public QCalendarWidget { public:XCal…

降息(Rate cuts)会导致股市上涨还是下降?答案是上涨

降息 中文版 根据经济学和金融学的基本理论&#xff0c;利率下行&#xff08;降息&#xff09;通常会导致股市上升。以下是原因及解释&#xff1a; 借贷成本降低&#xff1a; 降息会降低企业和消费者的借贷成本。企业可以更低的成本借款进行投资和扩展业务&#xff0c;增加未…

论文神器:即插即用归一化模型!无缝插入助力涨点!

归一化是深度学习和机器学习中一个非常重要的步骤&#xff0c;它通过对数据或网络层的输出进行变换&#xff0c;使其符合特定的标准&#xff0c;有效缓解不同特征间由于量纲和数值范围差异造成的影响&#xff0c;加速模型的收敛速度&#xff0c;并提高模型精度。 大多数归一化…

【ONLYOFFICE深度探索】:ONLYOFFICE桌面编辑器8.1震撼发布,打造高效办公新境界

文章目录 一、功能完善的PDF编辑器&#xff1a;解锁文档处理新维度二、幻灯片版式设计&#xff1a;释放创意&#xff0c;打造专业演示三、改进从右至左显示&#xff1a;尊重多元文化&#xff0c;优化阅读体验四、新增本地化选项&#xff1a;连接全球用户&#xff0c;跨越语言障…

4. ceph存储使用流程

ceph存储使用流程 一、ceph三种存储接口二、文件系统存储1、在ceph集群中部署MDS2、创建存储池3、创建文件系统存储4、业务服务器挂载使用cephfs4.1 将认证的令牌导出&#xff0c;拷贝到业务服务器4.2 业务服务器挂载使用ceph 5、删除文件系统存储5.1 业务服务器取消挂载5.2 修…

os7安装gitlab

gitlab安装要求&#xff1a;os7以上版本&#xff0c;4G内存&#xff0c;磁盘50GB 1.克隆 由于我这里不想影响原来的&#xff0c;所以这里克隆一个os系统。如果其他是第一次安装则不用。 2.修改ip地址 cd /etc/sysconfig/network-scriptsvi ifcfg-ens33 按&#xff1a;insert…