leetCode 739.每日温度
题目
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
示例 1:
输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
示例 2:
输入: temperatures = [30,40,50,60]
输出: [1,1,1,0]
思路:
- 遍历数组,将下标放进 单调栈,如果比过去几天的温度高,就是结果需要的下标
- 可以根据下标,得到之前的温度
- 相差了几天, 需要进行计算,计算后放进结果数组里面。
代码:
public int[] dailyTemperatures(int[] temperatures) {
if (temperatures == null) {
return null;
}
Deque<Integer> stack = new LinkedList<>();
int length = temperatures.length;
int[] answers = new int[length];
//思路:遍历数组,将下标放进 单调栈,如果比过去几天的温度高,就是结果需要的下标
for (int i=0; i< length; i++) {
//stack.peek() 是之前的下标,可以根据这个下标,得到之前的温度
//判断是否比过去几天的温度高, 由于要比较过去几天的温度,所以用 while
while (!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()] ) {
int preIndex = stack.pop();
//比过往的 温度高,那结果数组下标取 preIndex。这里需要计算相差了几天才是高温。
answers[preIndex] = i- preIndex;
}
//将下标放进栈里
stack.push(i);
}
return answers;
}
浙公网安备 33010602011771号