Next Greater Element II

 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; 

The 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]

 

import java.util.*;

class Solution {
    public int[] nextGreaterElements(int[] nums) {
        int n = nums.length;
        int[] result = new int[n];
        Arrays.fill(result, -1); // default to -1
        Stack<Integer> stack = new Stack<>(); // stores indices

        for (int i = 0; i < 2 * n; i++) {
            int curr = nums[i % n];

            // Resolve next greater for elements in stack
            while (!stack.isEmpty() && nums[stack.peek()] < curr) {
                int index = stack.pop();
                result[index] = curr;
            }

            // Only push index in first round (0 to n-1)
            if (i < n) {
                stack.push(i);
            }
        }

        return result;
    }
}

Comments

Popular posts from this blog

Two Sum II - Input Array Is Sorted

Comparable Vs. Comparator in Java

Increasing Triplet Subsequence