Next Greater Element II — Circular Monotonic Stack
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