题目:
请根据每日 气温
列表 temperatures
,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0
来代替。
示例:
输入: temperatures= [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
思路:
可能是真题刷的够了,看到就觉得该用栈,虽然没有想清楚具体实现,但是栈肯定要用。
要维护一个栈底到栈顶温度递减的单调栈
要注意往栈里面放的是坐标
复杂度:
时间复杂度:遍历O(n)
空间复杂度:栈O(1)
代码:
public int[] dailyTemperatures(int[] temperatures) {
int len = temperatures.length;
//用Deque实现栈,增删用LinkedList实现
Deque<Integer> stack = new LinkedList<>();
//结果数组
int res[]=new int[len];
//遍历
for(int i=0;i<len;++i){
int temp = temperatures[i];
while(!stack.isEmpty() && temp>temperatures[stack.peek()]){
int index=stack.pop();
res[index] = i-index;
}
stack.push(i);
}
return res;
}