博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
503. Next Greater Element II(单调栈)
阅读量:4181 次
发布时间:2019-05-26

本文共 990 字,大约阅读时间需要 3 分钟。

题目:

给一个循环数组,返回一个等长的数组,数组中的每一个元素是:它后面的第一个大于它的元素(如果后面没有就循环一遍到最前面找,直到循环了一圈为止),如果不存在这样的数,就返回-1~

思路:

首先建立一个等长的vt数组,起始都是-1。这个题目要两个循环解决,第一个循环i从0~n-1,对于每一个nums[i],把他们的下标index都放入栈中。但是在放入栈之前需要做这样的事情:比较栈顶元素和nums[i],如果恰好比nums[i]小,说明nums[i]就是它的第一大元素,就将v[[s.top()]的值变为nums[i]

开始第二次循环,依旧i从0~n-1,处理栈中剩下的元素,对于nums[i],如果栈顶元素和nums[i]比较,恰好nums[i]大,说明nums[i]就是他们这些没在后面找到最大元素的最大元素,出栈,result[s.top()] = nums[i]。这样所有遍历完毕后栈中只会剩下唯一一个元素,也就是该数组中最大的元素,它的result依旧是-1,其他的都已经更新完毕。

代码

class Solution {public:    vector
nextGreaterElements(vector
& nums) { vector
v(nums.size(),-1); stack
s; for(int x=0;x
nums[s.top()]){ v[s.top()] = nums[x]; s.pop(); } s.push(x); } for(int x=0;x < nums.size();x++){ while(!s.empty()&&x < s.top()&&nums[x] > nums[s.top()]){ v[s.top()] = nums[x]; s.pop(); } } return v; }};

转载地址:http://xnrai.baihongyu.com/

你可能感兴趣的文章
JavaBean对象转换EntityUtils工具类
查看>>
Maven常用命令
查看>>
SpringBoot | 运行报错,无法加载oracle连接驱动
查看>>
为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作
查看>>
AWS EC2如何从普通用户切换为root用户
查看>>
click方法不生效的
查看>>
mysql排行榜并列与不并列
查看>>
SpringBoot | Mybatis申明为Mapper文件
查看>>
JPA主键生成策略
查看>>
byte数组和InputStream的相互转换
查看>>
InputStream,InputStreamReader和Reader之间的区别与关系
查看>>
Java中System.arraycopy方法的使用
查看>>
tk.mybatis的使用记录
查看>>
遍历获取目录下的所有文件
查看>>
从指定服务器路径下载文件
查看>>
EasyExcel读取和写入java model数据
查看>>
《C编译原理》共享库的动态加载和静态加载
查看>>
《Android系统学习》第二章:如何制作OTA U盘升级包
查看>>
《Android系统学习》第五章:编译Android的JDK环境
查看>>
《C++特性》之引用类型
查看>>