All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0501_0600.s0503_next_greater_element_ii.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g0501_0600.s0503_next_greater_element_ii;

// #Medium #Array #Stack #Monotonic_Stack #Programming_Skills_II_Day_10
// #2022_07_24_Time_7_ms_(97.03%)_Space_44.3_MB_(85.99%)

import java.util.ArrayDeque;
import java.util.Deque;

/**
 * 503 - Next Greater Element II\.
 *
 * Medium
 *
 * 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.
 *
 * **Example 1:**
 *
 * **Input:** nums = [1,2,1]
 *
 * **Output:** [2,-1,2] Explanation: 
 *
 * The first 1's next greater number is 2; 
 *
 * he number 2 can't find next greater number. 
 *
 * The second 1's next greater number needs to search circularly, which is also 2.
 *
 * **Example 2:**
 *
 * **Input:** nums = [1,2,3,4,3]
 *
 * **Output:** [2,3,4,-1,4]
 *
 * **Constraints:**
 *
 * *   1 <= nums.length <= 104
 * *   -109 <= nums[i] <= 109
**/
public class Solution {
    public int[] nextGreaterElements(int[] nums) {
        int[] result = new int[nums.length];
        Deque stack = new ArrayDeque<>();
        for (int i = nums.length * 2 - 1; i >= 0; i--) {
            while (!stack.isEmpty() && nums[stack.peek()] <= nums[i % nums.length]) {
                stack.pop();
            }
            result[i % nums.length] = stack.isEmpty() ? -1 : nums[stack.peek()];
            stack.push(i % nums.length);
        }
        return result;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy