下一个更大元素II:原题链接
思路
利用单调栈的思想
- 这里要处理的数组是循环数组,但是输出的时候,还是输出原数组对应的答案,所以可以先进行处理,将原数组转化为一个伪循环数组。
即将数组 [ 0... n − 1 ] [0...n-1] [0...n−1]转化为数组[0…n-1,0…n-2] - 利用单调栈思想进行处理整个数组,从后往前处理,因为题目让求得是每个元素的 下一个更大元素
单调栈思想参考 - 将答案翻转,去掉尾部伪循环数组的部分,return结果
代码
#include
class Solution {
public:
vector nextGreaterElements(vector& nums) {
stack s;
vector res;
//将原数组后面添上循环的内容,变为线性伪循环数组
int length=nums.size();
for(int i=0;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



