单调递减栈解决leetcode739每日温度问题

思路:很简单的一道单调栈的题目,就是要找出每个元素右侧第一个比他大的元素,用单调递减栈去解决。如果栈不为空并且当前当前元素大于栈顶元素的时候,就会弹出栈内的元素,对于弹出的栈来说,当前元素就是他右侧第一个比他大的元素。
 
题目:
请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。
 
示例 1:
 
输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
 
//递减单调栈找出每个元素右侧第一个出现的最大值
    public int[] dailyTemperatures(int[] temperatures) {
        int rightMax;
        int[] res=new int[temperatures.length];
        LinkedList<Integer> stack=new LinkedList<Integer>();
        for(int i=0;i<temperatures.length;i++){
            while(!stack.isEmpty()&&temperatures[stack.peek()]<temperatures[i]){
                res[stack.peek()]=i-stack.pop();
            }
            stack.push(i);
        }
        //还在栈里,说明右侧没有比他大的
        while(!stack.isEmpty()){
            res[stack.pop()]=0;
        }
        return res;
    }

posted @ 2021-12-20 16:59  想进大厂努力的码农  阅读(44)  评论(0)    收藏  举报