[LeetCode] 503. 下一个更大元素 II (Next Greater Element II)

本文已收录于 LeetCode刷题 系列,共计 28 篇,本篇是第 23 篇

本文已收录到:LeetCode刷题 专题

[title]题目[/title]

给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。

示例 1:

输入: [1,2,1]
输出: [2,-1,2]
解释: 第一个 1 的下一个更大的数是 2;
数字 2 找不到下一个更大的数;
第二个 1 的下一个最大的数需要循环搜索,结果也是 2。
注意: 输入数组的长度不会超过 10000。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/next-greater-element-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

[title]视频讲解[/title]

[bilibili cid=”” page=”1″]455295288[/bilibili]

 

[title]简明思路[/title]

常规方法会超时,此题要用单调栈。

 

[title]代码[/title]

class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums) {
        stack<int> stack;
        vector<int> res(nums.size(), -1);

        for (int i = 0; i < nums.size()*2; i++)
        {
            while (!stack.empty() && nums[i % nums.size()] > nums[stack.top()])
            {
                res[stack.top()] = nums[i % nums.size()];
                stack.pop();   
            }
            if (i < nums.size())
            {
                stack.push(i);
            }     
        }
        return res;
    }
};

 

 

作者: 高志远

高志远,23岁,男生,毕业于上海杉达学院电子商务系。

《[LeetCode] 503. 下一个更大元素 II (Next Greater Element II)》有一条评论

  1. 04:18秒更正:
    单调递增栈:指的是从栈顶到栈底元素递增。
    单调递减栈:指的是从栈顶到栈底元素递减。

发表评论

邮箱地址不会被公开。