Next Greater Element II — Circular Monotonic Stack

Sanjeev SharmaSanjeev Sharma
1 min read

Advertisement

Problem

Find next greater element for circular array (wrap around).


Solutions

Python

class Solution:
    def nextGreaterElements(self, nums: list[int]) -> list[int]:
        n=len(nums); res=[-1]*n; stack=[]
        for i in range(2*n):
            while stack and nums[stack[-1]]<nums[i%n]:
                res[stack.pop()]=nums[i%n]
            if i<n: stack.append(i)
        return res

C++

class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums){
        int n=nums.size(); vector<int> res(n,-1); stack<int> st;
        for(int i=0;i<2*n;i++){
            while(!st.empty()&&nums[st.top()]<nums[i%n]){res[st.top()]=nums[i%n];st.pop();}
            if(i<n) st.push(i);
        }
        return res;
    }
};

Complexity

  • Time: O(n) | Space: O(n)

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro