0%

单调栈

739.每日温度

暴力解法会超过时间限制。

维护一个单调栈,栈中存放的是温度数组各元素的下标而不是温度值,但单调性根据温度值来维护。

核心代码:

1
2
3
4
5
6
for i in range(l-1,-1,-1):
while st and temperatures[st[-1]] <= temperatures[i]:
st.pop()
if st:
answer[i] = st[-1] - i
st.append(i)

比如输入是30,60,90。单调栈存的就是 [3 2 1] 栈顶对应的温度值为30。为了保证先入后出,从后往前遍历。存下标的话,因为我们有原数组,相当于可以映射过去也就有了实际的温度值,如果存实际的温度值就会丢失下标的信息量,并且答案实际也是要从下标推出来的,所以实际上是从单调栈线性推出答案,这就是单调栈的优越性。