【LeetCode】503、下一个更大的元素 ||

一、题目

503、下一个更大的元素 ||

二、思路

找下一个更大的元素,可以用单调栈实现,本文用单调递减栈(从栈底向栈顶的方向递减)

循环数组,可以用两个数组顺序排列来简化,我们用 i 从 2*nums.size() 开始,从右向左遍历元素,若元素大于栈顶则栈顶需出栈,入栈时记入到 ans 数组中。

三、编码

#include <iostream>
#include<vector>
#include <stack>

using namespace std;

vector<int> nextGreaterElements(vector<int>& nums) {
    
    
    stack<int> st;
    int sz = nums.size();
    vector<int> ans(sz);
    for (int i = 2 * nums.size() - 1; i >= 0; i--) {
    
    
        int num = nums[i%sz];
        while(!st.empty() && num >= st.top()) {
    
    
            st.pop();
        }
        ans[i%sz] = st.empty() ? -1 : st.top();
        st.push(num);
    }
    return ans;
}

int main() {
    
    
    vector<int> v = {
    
    1,2,3,4,3};
    nextGreaterElements(v);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/jiaoyangwm/article/details/127466808