当前位置:网站首页>leetcode 503.下一个更大元素II 单调栈
leetcode 503.下一个更大元素II 单调栈
2022-08-09 18:05:00 【Alkali!】
题目描述
思路
利用单调栈的思想
- 这里要处理的数组是循环数组,但是输出的时候,还是输出原数组对应的答案,所以可以先进行处理,将原数组转化为一个伪循环数组。
即将数组 [ 0... n − 1 ] [0...n-1] [0...n−1]转化为数组[0…n-1,0…n-2] - 利用单调栈思想进行处理整个数组,从后往前处理,因为题目让求得是每个元素的 下一个更大元素
单调栈思想参考 - 将答案翻转,去掉尾部伪循环数组的部分,return结果
代码
#include<algorithm>
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
stack<int> s;
vector<int> res;
//将原数组后面添上循环的内容,变为线性伪循环数组
int length=nums.size();
for(int i=0;i<length-1;i++)
nums.push_back(nums[i]);
//从后往前遍历伪循环数组,利用单调栈的思想进行处理
for(int i=nums.size()-1;i>=0;i--)
{
while(!s.empty()&&s.top()<=nums[i])
s.pop();
if(s.empty()) //如果不存在,则输出 -1
res.push_back(-1);
else
res.push_back(s.top());
s.push(nums[i]);
}
//对结果的处理
reverse(res.begin(),res.end());
for(int i=0;i<length-1;i++)
res.pop_back();
return res;
}
};
边栏推荐
猜你喜欢
读大学有用吗?
软件设计的七大原则
毕昇编译器优化:Lazy Code Motion
[Free Column] Android Security for Peace Elite (FZ) APK Reverse Analysis
JMeter压测时如何在达到给定错误数量后停止测试
释放数据价值的真正法宝,数据要素市场化开发迫在眉睫
Fully automated machine learning modeling!The effect hangs the primary alchemist!
对数学直观、感性的认知是理解数学、喜爱数学的必经之路,这本书做到了!
使用.NET简单实现一个Redis的高性能克隆版(四、五)
C#/VB.NET:从PowerPoint文档中提取文本和图片
随机推荐
国产抗新冠口服药每瓶不超300元/ 我国IPv6网络全面建成/ 谷歌入局折叠屏手机...今日更多新鲜事在此...
基于AWS构建云上数仓第一步:云平台的基础概念
web正则表达式中^和$的含义是什么
Unity Webgl与JS相互交互 Unity 2021.2之后的版本
[免费专栏] Android安全之ZIP文件目录遍历漏洞
Ros简介
LeetCode笔记:Biweekly Contest 84
你应该试着独自做个游戏
numpy中nan_to_num如何使用
C程序设计-第四版
JSDN blog system
[免费专栏] Android安全之动态代码注入技术(利用JDB调试APK)
winpe工具WEPE微PE工具箱
从功能测试到自动化测试你都知道他们的有缺点吗?
AWS CodePipeLine 跨账号部署ECS
Unity webgl 关于适配网页 ,并且用到js中的SetTimeOut和SetInterval()
论文分享:「FED BN」使用LOCAL BATCH NORMALIZATION方法解决Non-iid问题
ceph集群部署
电商项目架构图
三星旗舰优惠千八,苹果优惠过千,国产旗舰只降五百打发叫花子