每日温度
Posted at 2022-07-23
给定一个整数数组 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]
来访问元素
遍历到元素i
时,先与栈顶元素j
比较,若比栈顶元素大,则将栈顶元素弹出,并记结果数组ans[j]=i-j
,i-j
为他们之间的距离,迭代直到元素不比栈顶元素大时,将元素压入栈中,这样就保持了栈的单调性,下面是图解:
因为数组默认值0,所以76、73不用出栈都行
实现代码
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int n=temperatures.length;
Deque<Integer> stack=new ArrayDeque<>();
int[] ans=new int[n];
for(int i=0;i<n;i++) {
while (!stack.isEmpty()&&temperatures[i]>temperatures[stack.peek()]) {
int index=stack.pop();
ans[index]=i-index;
}
stack.push(i);
}
return ans;
}
}