栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

leetcode 503.下一个更大元素II 单调栈

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode 503.下一个更大元素II 单调栈

题目描述

下一个更大元素II:原题链接


思路

利用单调栈的思想

  1. 这里要处理的数组是循环数组,但是输出的时候,还是输出原数组对应的答案,所以可以先进行处理,将原数组转化为一个伪循环数组。
    即将数组 [ 0... n − 1 ] [0...n-1] [0...n−1]转化为数组[0…n-1,0…n-2]
  2. 利用单调栈思想进行处理整个数组,从后往前处理,因为题目让求得是每个元素的 下一个更大元素
    单调栈思想参考
  3. 将答案翻转,去掉尾部伪循环数组的部分,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 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1039565.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号