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

leetcode_503 下一个更大元素

1. 题意

在一个循环数组中,找到下一个比它大的数。

2. 题解

也不知道怎么就单调栈了,可能是刷出来的吧。。。

还是来解释一下吧!!!

如果有新元素入栈 c c c

那么在栈内的元素只要小于新元素的 s s s,都需要出栈,因为他们的

下一个更大的元素显然就是 c c c。这些小于 s s s的栈内元素都需要出栈。

更进一步的说,栈内的元素它们都还没有找到下一个更大的元素。

为什么是栈呢?因为我们先比较的是离当前元素最近的,

也就是后入栈的那些先比较,也就满足了先进后出的特性。

那么单调性呢?因为在入栈时需要保证栈内元素是小于当前元素的,因

此栈内元素一定是单调递减的,当然可以相等。

举个例子

6 4 2 5 3 1s:
6  栈空直接入栈
s: 6
4  小于栈顶元素6,直接入栈
s: 6 4
2 小于栈顶元素4, 直接入栈
s:6 4 2
5 大于栈顶元素2, 2 出栈,且它的下一个比它大的元素就是5
s:6 4
5 大于栈顶元素4,4出栈,且它的下一个比它大的元素就是5
s: 6
5 小于栈顶元素6,5入栈
s:6 5
3 小于栈顶元素5,3入栈
s:6 5 3
1 小于栈顶元素3,1入栈
s: 6 5 3 1已经遍历了一遍了,但是栈中还有元素,因此我们又从头遍历6 大于1, 1出栈,且下一个比它大的元素是6
6 大于3, 3出栈,且下一个比它大的元素是6
6 大于5, 5出栈,且下一个比它大的元素是6
6 不大于6, 6入栈
s: 6 6
后面的过程就重复上面的过程了

对于一个循环的数组,我们常常附加一个相同的数组来把它变成

线性的。在这里我们并没有直接附加,而是采取了取模这种方式。

代码其实就没有那么重要了。。。

  • 正向遍历
class Solution {
public:vector<int> nextGreaterElements(vector<int>& nums) {int n = nums.size();        std::stack<int> s;vector<int> ans( n, -1);for (int i = 0; i < 2 * n - 1; ++i) {int idx = i % n;while (!s.empty() && nums[s.top()] < nums[ idx ]) {ans[ s.top() ] = nums[ idx  ];s.pop();}s.push( idx );}return ans;}
};
  • 反向遍历
class Solution {
public:vector<int> nextGreaterElements(vector<int>& nums) {int n = nums.size();        std::stack<int> s;vector<int> ans( n, -1);for (int i = 2 * n - 1; ~i; --i) {int idx = i % n;while (!s.empty( ) && nums[ s.top()] <= nums[ idx ]) {s.pop();}if (!s.empty() && i < n) {ans[ idx ] = nums[s.top()];}s.push( idx );}return ans;}
};
http://www.xdnf.cn/news/1036459.html

相关文章:

  • <11>-MySQL事务管理
  • 精益数据分析(103/126):免费移动应用的下载量、成本优化与案例解析
  • python队列练习 2022年信息素养大赛复赛/决赛真题 小学组/初中组 python编程挑战赛 真题详细解析
  • 使用 MoviePy 实现图像序列合成视频并添加背景音乐
  • 层压板选择、信号完整性和其他权衡
  • JasperReport生成PDF/A类型文档
  • C++:编译和链接拓展
  • R语言非结构化文本挖掘入门指南
  • tcp, udp , 与 select .
  • 创客匠人:AI重构知识IP定位与变现效率新范式
  • 多态取代条件表达式举例
  • 【Photoshop】使用置换将字体和背景融为一体
  • flask JWT 认证
  • 了解Redis的使用
  • 【AS32系列MCU调试教程】性能优化:Eclipse环境下AS32芯片调试效率提升
  • CSS预编译语言less
  • 键盘按键枚举 Key 说明文档
  • iOS swiftUI的实用举例
  • 人工智能学习15-Numpy-花式索引和索引技巧
  • linux常用基础命令_新
  • Java 数据类型选择题
  • 使用大模型预测短暂性脑缺血发作(TIA)的全流程系统技术方案大纲
  • Python Flask 框架学习笔记
  • Linux操作系统之运维常用命令
  • 华为OD机试_2025 B卷_字符串分割(Python,100分)(附详细解题思路)
  • aflplusplus:开源的模糊测试工具!全参数详细教程!Kali Linux教程!(四)
  • 22 - PSA模块
  • 解惑1、为何大容量电容滤低频,小容量电容滤高频
  • 数据库资源帖
  • 同旺科技 USB TO SPI / I2C适配器(专业版)--EEPROM读写——A