0
点赞
收藏
分享

微信扫一扫

[亚麻高频题] Leetcode 739. Daily Temperatures(每日温度)

心如止水_c736 2022-02-01 阅读 36

题目描述&链接

Leetcode 739. Daily Temperatures : 一个数组记录每日的温度,输出一个数组每一个元素代表下一个比当前温度高的天数

题目思路

单调栈经典应用,寻找比当前元素更高的下一个元素位置,维护一个单调递减栈,如果出现比栈顶元素大的新元素,那么就把比新元素小的栈内元素pop出来,当前元素即为这些元素更大的下一个元素位置。Java中使用Stack推荐使用Deque,Java源码对于Deque进行了优化,有效提高了运行速度。

代码如下:

class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        
        // 暴力搜索 O(N^2)
        
        // 单调栈,找下一个更大位置
        int n = temperatures.length;
        int[] nextH = new int[n];
        
        Deque<Integer> stk = new ArrayDeque<>();
        
        for(int i=0; i<n; i++) {
            while(!stk.isEmpty() && temperatures[i]>temperatures[stk.peek()]) {
                int idx = stk.pop();
                nextH[idx] = i-idx;
            }
            stk.push(i);
        }
        
        return nextH;
    }
}

时间复杂度:O(N);空间复杂度:O(N)。 

举报

相关推荐

0 条评论