用单调栈解决数组的下一个更大元素的问题

在这里插入图片描述

class Solution {
    
    
    public int[] nextGreaterElement(int[] nums1, int[] nums2) {
    
    
        if(nums2.length==0) return null;
        HashMap<Integer, Integer> map = new HashMap<>();
        Stack<Integer> stack = new Stack<>();
        stack.push(nums2[0]);
        int i=1;
        while(i<nums2.length){
    
    
            
            while(!stack.empty()&&nums2[i]>stack.peek()) {
    
    
                 map.put(stack.peek(),nums2[i]);
                 stack.pop();
            }
            stack.push(nums2[i++]);
        }
        while(!stack.empty()){
    
    
            map.put(stack.pop(),-1);
        }

       for(int j=0;j<nums1.length;j++){
    
    
           nums1[j]=map.get(nums1[j]);
       }
       return nums1;


    }
}

猜你喜欢

转载自blog.csdn.net/changbaishannefu/article/details/115143898