LeetCodeHot100——739.每日温度

今天的题目链接放在这里了:739. 每日温度 - 力扣(LeetCode)

这道题的要求就是给定一个数组,里面表示一组相邻日期的温度,题目的要求就是要让我们返回一个同等大小的数组,每一个位置的值是对应位置日期的温度在多少天之后会上涨,如果不会上涨就为0,例如:

复制代码
temperatures = [73,74,75,71,69,72,76,73],ans = [1,1,4,2,1,1,0,0]

对于这题我们的思路是利用一个单调栈来实现,单调栈就是确保栈中是按单调递减或单调递增的规则进行数据存储,如果有打破规则的就让对应位置出栈,确保满足规则。对于这个题我的思路是这样的,先创建一个res数组存储结果,一个栈存储的数据类型是一个大小为2的数组,一个位置存储temperature下标和下标对应位置的值,遍历一遍数组,每个位置进栈之前做一个判断,判断栈为空的前提下栈顶元素的值是否小于temperature当前位置的值,如果小于就把res下标对应位置的值设置为i-下标,从而实现对每个位置的值进行填写,没有填写的位置也就是不会上升的位置默认就为0了,到此位置,问题完美解决,我的代码放在下面了:

java 复制代码
class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        if(temperatures == null || temperatures.length == 0){
            return null;
        }
        int[] res = new int[temperatures.length];
        //[下标,值]
        Deque<Integer[]> stack = new LinkedList<>();
        for(int i = 0;i<temperatures.length;i++){
            Integer[] top = stack.peek();
            while(!stack.isEmpty()&&temperatures[i] > top[1]){
                res[top[0]] = i - top[0];
                stack.pop();
                top = stack.peek();
            }
            Integer[] cur = {i,temperatures[i]};
            stack.push(cur);
        }
        return res;
    }
}