[503. 下一个更大元素 II] 单调栈

 

 

 

import java.util.ArrayDeque;
import java.util.Deque;

class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        solution.nextGreaterElements(new int[]{
            1,2,1
        });

    }
    public int[] nextGreaterElements(int[] nums) {
        Deque<Integer> stack = new ArrayDeque();
        int[] ans = new int[nums.length];
        int left = 0;

        for(int i=nums.length-1;i>=0;i--){
            int num = nums[i];
            int idx = i;

            while(!stack.isEmpty() &&stack.peek() <= num){
                stack.pop();
            }
            if(!stack.isEmpty()){
                ans[idx] = stack.peek();
                stack.push(num);
                continue;
            }else{
                int x = left;
                for(x= left;x< i && nums[x]<=num;x++);
                left = x;

               if( left < i){
                   stack.addLast(nums[left]);
                   ans[idx] = stack.peek();
               }else{
                   ans[idx] = -1;
               }
               stack.push(num);
            }
        }
        return ans;
    }
}

 

posted @ 2022-05-23 18:04  fishcanfly  阅读(25)  评论(0)    收藏  举报
//雪花飘落效果