503. 下一个更大元素 II

Posted Debroon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了503. 下一个更大元素 II相关的知识,希望对你有一定的参考价值。

503. 下一个更大元素 II

 


题目


 


算法设计:单调栈

前置知识:单调栈原理,请猛击:496. 下一个更大元素 I

496. 下一个更大元素 I 这题相同,唯一变化是数组变成了循环数组。

比如输入 [1, 2, 1],循环数组应该返回 [2, -1, 2],而不是 [2, -1, -1],因为拥有了环形属性,最后一个元素 1 绕了一圈后找到了比自己大的元素 2。

对于这种需求,思路是将数组长度翻倍:

  • 原数组:2, 3, 1
  • 拉直数组:2, 3, 1, 2, 3, 1

这样原数组的末尾 1,就可以找到右边第一个更大的元素 2。

class Solution 
public:
    vector<int> nextGreaterElements(vector<int>& nums) 
        stack<int> s;
        vector<int> res(nums.size());
        for (int i = nums.size() - 1; i >= 0; i--) // 预先存下数组,实现数组翻倍
            s.push(nums[i]);    
        for (int i = nums.size() - 1; i >= 0; i--) 
            while (!s.empty() && s.top() <= nums[i])
                s.pop();
            res[i] = s.empty()? -1: s.top();
            s.push(nums[i]);
        
        return res;
    
;

以上是关于503. 下一个更大元素 II的主要内容,如果未能解决你的问题,请参考以下文章

503. 下一个更大元素 II

leetcode——503. 下一个更大元素 II

503. Next Greater Element II 下一个更大元素

LeetCode 503. 下一个更大元素 II

LeetCode 0503. 下一个更大元素 II

刷题6:下一个更大元素 II