#503
Medium Algorithms Next greater element ii
Array Stack Monotonic Stack
67.9% acceptance
Feb 19, 2026
9097
237
Given a circular integer array nums (i.e., the next element of nums[nums.length - 1] is nums[0]), return the next greater number for every element in nums.
The next greater number of a number x is the first greater number to its traversing-order next in the array, which means you could search circularly to find its next greater number. If it doesn't exist, return -1 for this number.
Solution
Rust
Time O(n²)
Space O(n)
impl Solution {
pub fn next_greater_elements(nums: Vec<i32>) -> Vec<i32> {
let n = nums.len();
let mut result = vec![-1i32; n];
let mut stack: Vec<usize> = Vec::new();
for i in 0..(2 * n) {
let idx = i % n;
while !stack.is_empty() && nums[*stack.last().unwrap()] < nums[idx] {
let top = stack.pop().unwrap();
result[top] = nums[idx];
}
if i < n {
stack.push(idx);
}
}
result
}
}