快捷搜索: 王者荣耀 脱发

LeetCode 503. 下一个更大元素 II

【单调栈】把最后一个元素之前的那些元素先入栈,形成环,再按照单调栈的方法遍历即可:

即对于每个元素i,把栈中比他小的元素全部出栈,此时如果栈顶还有,那么栈顶就是第一个比他大的,如果为空说明没有。最后不要忘了把元素i入栈。

class Solution {
    // 单调栈 3:15 3:24
    public int[] nextGreaterElements(int[] nums) {
        Deque<Integer> stack = new LinkedList();
        int i, j, n = nums.length;
        for (i = n - 2; i >= 0; i--) {
            while (!stack.isEmpty() && stack.peek() <= nums[i]) {
                stack.pop();
            }
            stack.push(nums[i]);
        }
        int[] ans = new int[n];
        for (i = n - 1; i >= 0; i--) {
            while (!stack.isEmpty() && stack.peek() <= nums[i]) {
                stack.pop();
            }
            if (stack.isEmpty()) {
                ans[i] = -1;
            } else {
                ans[i] = stack.peek();
            }
            stack.push(nums[i]);
        }
        return ans;
    }
}
经验分享 程序员 微信小程序 职场和发展