Back to all solutions
#503 - Next Greater Element II
Problem Description
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
/**
* @param {number[]} nums
* @return {number[]}
*/
var nextGreaterElements = function(nums) {
const total = nums.length;
const result = new Array(total).fill(-1);
const stack = [];
for (let i = 0; i < 2 * total; i++) {
while (stack.length && nums[i % total] > nums[stack[stack.length - 1]]) {
result[stack.pop()] = nums[i % total];
}
stack.push(i % total);
}
return result;
};