LeetCode 739. 每日温度
题目描述
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
示例:
输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
思路
思路:单调栈,栈中存储的是一个数组,包括当日温度和天数
- 遍历温度数组,逐步将温度压入栈中;
- 当遇到下一个高温(temperatures[i] > deque.peek()[0])时,使用while循环弹出结果,并将当前温度压入数组
代码
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
Deque<Integer[]> deque = new ArrayDeque<>();
int[] result = new int[temperatures.length];
for (int i = 0; i < temperatures.length; i++) {
if (!deque.isEmpty() && deque.getLast()[0] < temperatures[i]){ // 说明出现了下一个大温度
while (!deque.isEmpty() && deque.getLast()[0] < temperatures[i]){
Integer[] popElem = deque.removeLast();
result[popElem[1]] = i - popElem[1];
}
}
deque.addLast(new Integer[]{temperatures[i], i});
}
return result;
}
}