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;
    }
posted @ 2024-04-01 18:15  Shie1d  阅读(7)  评论(0)    收藏  举报