题目描述&链接
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;
}
}
时间复杂度:;空间复杂度:
。