0
点赞
收藏
分享

微信扫一扫

739. 每日温度

冶炼厂小练 2022-05-04 阅读 79

题目:

力扣

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指在第 i 天之后,才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。

题解:

遍历整个数组,如果栈不空,且当前数字大于栈顶元素,那么如果直接入栈的话就不是 递减栈 ,所以需要取出栈顶元素,由于当前数字大于栈顶元素的数字,而且一定是第一个大于栈顶元素的数,直接求出下标差就是二者的距离。

继续看新的栈顶元素,直到当前数字小于等于栈顶元素停止,然后将数字入栈,这样就可以一直保持递减栈,且每个数字和第一个大于它的数的距离也可以算出来。

class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        Deque<Integer> stack = new LinkedList<>(); //栈里只有递减元素,存放它们对应的下标
        int n = temperatures.length;
        int[] res = new int[n];
        for (int i = 0; i < n; i++) {
            //用while是因为当前的温度值可能比当前栈顶下面大,栈顶小的值pop后不影响下面的元素
            while (!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]) {
                int pre = stack.pop();
                res[pre] = i - pre;
            }
            stack.push(i);
        }
        return res;
    }
}

参考:力扣

举报

相关推荐

0 条评论