这道题和496基本一样,只要先把array扩展为原来的一倍就可以处理circular的问题。

var nextGreaterElements = function(nums) {
    const len = nums.length;
    if (len === 0) {
        return [];    
    }
    const res = new Array(len).fill(-1);
    nums = [...nums, ...nums.slice(0, len-1)];
    const stack = [];
    for (let i = 0; i < nums.length; i++) {
        if (stack.length === 0 || nums[stack[stack.length-1]] >= nums[i]) {
            stack.push(i);
        } else {
            while (stack.length > 0 && nums[stack[stack.length-1]] < nums[i]) {
                res[stack.pop()] = nums[i];
            }
            stack.push(i);
        }
    }

    return res.slice(0, len);
};

results matching ""

    No results matching ""