Skip to main content
Back to problems
#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)
LeetCode
solution.rs
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
  }
}