【LeetCode】739. 每日温度

739. 每日温度

知识点:栈;单调

题目描述

请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。

示例
输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]

输入: temperatures = [30,40,50,60]
输出: [1,1,1,0]

输入: temperatures = [30,60,90]
输出: [1,1,0]


解法一:单调

这个题目是很典型的单调栈的题,我们可以维持一个单调递减的栈,也就是栈底是最大的,这样,当来一个新元素的时候判断当前元素和栈顶的大小关系,如果当前元素<栈顶,满足递减栈,可以入栈了;如果当前元素>栈顶,那就证明找到了栈顶对应的下一个更大的,然后再看新的栈顶看还大不大了,如果大了那证明也还是新的栈顶的对应的温度。

注意我们在这个单调栈里存的是下标,因为最后要返回的是下标,但是这个下标入栈是根据其对应的值来进入的。

单调栈在解决这种更大,更小类问题时很常用。

class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        int index = 0;
        int[] res = new int[temperatures.length];
        Stack<Integer> stack = new Stack<>(); //维持一个单调递减的栈;
        while(index < temperatures.length){
            while(!stack.isEmpty() && temperatures[index] > temperatures[stack.peek()]){
                res[stack.peek()] = index-stack.peek();  //存的是下标;
                stack.pop();
            }
            stack.push(index);
            index++;
        }
        return res;
    }
}
上一篇:刷题-Leetcode-739. 每日温度


下一篇:【LeetCode】739. 每日温度【单调栈】