LeetCode每日一题-3.6-503.下一个更大元素II

题目描述

在这里插入图片描述

解法 单调栈

思路如注释

class Solution {
    
    
public:
//思路:
//维护一个单调递减的栈,里面存放元素下标
//遍历数组,发现当前元素大于栈里面元素,说明当前元素是这些元素的下一个更大元素
//将这些比较小的元素出栈,他们的下一个更大的数就是当前元素。
    vector<int> nextGreaterElements(vector<int>& nums) {
    
    
        int len = nums.size();
        stack<int> s;
        vector<int> ans(len, - 1);
        //入栈的思路还是一直入栈直到出现一个大于元素后尝试出栈
        for(int i = 0; i < 2 * len - 1; i++) {
    
    
            //出现一个大于栈顶的元素
            while(!s.empty() && nums[s.top()] < nums[i % len]) {
    
    
                ans[s.top()] = nums[i % len];
                s.pop();
            }
            s.push(i % len);
        }
        return ans;
    }
};

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42883222/article/details/114440582