菜鸟什么时候才能变成老鸟,欢迎留言纠错~|

Shie1d

园龄:5年9个月粉丝:6关注:0

503. 下一个更大元素 II(中等)

核心思想
维护一个单调递减的单调栈(非严格)
但是由于是循环的,做两次循环即可
代码

public int[] nextGreaterElements(int[] nums) {
        Deque<Integer> dq = new ArrayDeque<>();
        int[] res = new int[nums.length];
        Arrays.fill(res, -1);
        for(int k = 0; k < 2; k++){
            for(int i = 0; i < nums.length; i++){
		//维护单调递减的单调栈(非严格)
                if(dq.isEmpty() || nums[i] <= nums[dq.getLast()]){
                    dq.add(i);
                }else{
		    // 找到答案
                    while(!dq.isEmpty() && nums[i] > nums[dq.getLast()]){
                        res[dq.getLast()] = nums[i];
                        dq.pollLast();
                    }
                    dq.add(i);
                }
            }
        }
        return res;
    }

本文作者:Shie1d

本文链接:https://www.cnblogs.com/ganyq/p/18109108

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Shie1d  阅读(4)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起