美文网首页
循环数组单调栈

循环数组单调栈

作者: 小幸运Q | 来源:发表于2021-04-16 21:17 被阅读0次

image.png image.png
  • 一个点前后的点都可以是它的解,同一个点相等肯定不会入栈。
class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums) {
        vector<pair<int,int>>stack;
        vector<int>res;
        for(int i=nums.size()-1;i>=0;i--){
            stack.push_back(make_pair(nums[i],i));
        }
        for(int i=nums.size()-1;i>=0;i--){
            // i [0,len-1] 
            while(!stack.empty()&&stack.back().first<=nums[i]){
                stack.pop_back();
            }
        
            // 可能出现遍历完后面倍增数组的情况
            if(stack.empty()){
                res.push_back(-1);
            }
            else{
                res.push_back(stack.back().first);
            }
            stack.push_back(make_pair(nums[i],i));
        }
        reverse(res.begin(),res.end());
        return res;
    }
};

或者简化一下:直接暴力空的stack从后往前遍历,res取i%n,相当于先考虑一轮后序遍历,再进行一轮后序遍历,相当于第一轮是考虑后边的更大值,第二轮是解决后面没有更大值的情况下考虑前面的情况。如果前面后面都有更大值也不怕,因为第二轮遍历会用后面的最大值覆盖掉前面的最大值的解。

class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums) {
        int n = nums.size();
        vector<int> res(n);
        stack<int> s;
        // 假装这个数组长度翻倍了
        for (int i = 2 * n - 1; i >= 0; i--) {
            // 索引要求模,其他的和模板一样
            while (!s.empty() && s.top() <= nums[i % n])
                s.pop();
            res[i % n] = s.empty() ? -1 : s.top();
            s.push(nums[i % n]);
        }
        return res;
    }
};

相关文章

  • 循环数组单调栈

    一个点前后的点都可以是它的解,同一个点相等肯定不会入栈。 或者简化一下:直接暴力空的stack从后往前遍历,res...

  • 【栈】每日温度(medium)

    思路:单调栈, 类似一个有序数组,单调递增或者递减

  • 常用算法(0)--单调栈法

    1、概念 单调栈就是单调增或者单调减的栈。在遍历数组的的过程中将大(小于)于的元素存放在栈中,碰到小(大)于的元素...

  • 数据结构与算法之数组与链表

    线性表包括数组,链表(单链表,双向链表,循环链表,双向循环链表,静态链表),栈(顺序栈,链式栈),队列(普通队列,...

  • 数据结构与算法之栈与队列

    线性表包括数组,链表(单链表,双向链表,循环链表,双向循环链表,静态链表),栈(顺序栈,链式栈),队列(普通队列,...

  • 常见的数据结构

    常见的数据结构有: 数组 链表单链表、双向链表、循环链表、双向循环链表、静态链表 栈顺序栈、链式栈 队列普通队列、...

  • 132模式(单调栈)

    这道题用了单调栈,从后往前,这样就能保证栈顶的序号一定最大,为k, 单调栈维护一个递减序列,所以从后往前遍历数组,...

  • 单调栈和应用实践

    什么是单调栈 单调栈的定义:单调栈即满足单调性的栈结构。与单调队列相比,其只在一端进行进出。 如何使用单调栈 单调...

  • 1.单调栈

    一、单调栈定义 单调栈(monotone-stack)是指栈内元素(栈底到栈顶)都是(严格)单调递增或者单调递减的...

  • 单调栈 2020-06-12(未经允许,禁止转载)

    1.单调栈 指栈内元素保持单调性的栈结构,分为单调增栈(栈底到栈顶元素递增)和单调减栈(栈底到栈顶元素递减) 2....

网友评论

      本文标题:循环数组单调栈

      本文链接:https://www.haomeiwen.com/subject/mlnelltx.html