题目描述
给定一个整数数组 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]
示例 3:
输入: temperatures = [30,60,90]
输出: [1,1,0]
题目解析
- 可以维护一个栈
- 栈里面存储的当前所遇到的最大元素所对应的下标,方便计算天数
- 以数组
[73,74,75,71,69,72,76,73]
为例 i = 0,ele = 73,入栈--> {0},结果集 = [0, 0, 0, 0, 0, 0, 0, 0]
i = 1,ele = 74,大于栈顶元素,弹出,入栈 --> {1}
- 结果集 =
[1 - 0, 0, 0, 0, 0, 0, 0, 0]
i = 2,ele = 75;同理
- 栈 =
{2}
- 结果集 =
[1, 1, 0, 0, 0, 0, 0, 0]
i = 3,ele = 71;
- 栈 =
{2, 3}
- 结果集 =
[1, 1, 0, 0, 0, 0, 0, 0]
i = 4,ele = 69
- 栈 =
{2, 3, 4} --> 75 > 71 > 69
- 结果集 =
[1, 1, 0, 0, 0, 0, 0, 0]
i = 5,ele = 72
小于72
的元素出栈
- 栈 =
{2, 5}
- 结果集 =
[1, 1, 0, 5 - 3, 5 - 4, 0, 0, 0]
i = 6,ele = 76
小于76
的元素出栈
- 栈 =
{6}
- 结果集 =
[1, 1, 6 - 2, 5 - 3, 5 - 4, 6 - 5, 0, 0]
i = 7,ele = 73
没有小于73
的元素
- 栈 =
{6, 7}
- 结果集 =
[1, 1, 6 - 2, 5 - 3, 5 - 4, 6 - 5, 0, 0]
- 结果集 =
[1,1,4,2,1,1,0,0]
show code
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int n = temperatures.length;
// 创建对应的结果集
int[] ans = new int[n];
// 创建一个栈保存对应的 索引
Deque<Integer> stack = new LinkedList<>();
for(int i = 0;i < n;i++) {
int temperature = temperatures[i];
while(!stack.isEmpty() && temperatures[stack.peek()] < temperature) {
int popIdx = stack.pop();
ans[popIdx] = i - popIdx;
}
stack.push(i);
}
return ans;
}
}