题目
题目就是找到要推迟几天才能找到温度更高的日子。
尝试过for i/j循环直接计算 结果超时。
代码
代码一(栈方法):
class Solution:
def dailyTemperatures(self, T):
ans = [0] * len(T)
stack = []
for i, t in enumerate(T):
while stack and T[stack[-1]] < t:
cur = stack.pop()
ans[cur] = i - cur
stack.append(i)
return ans
将找不到数值的索引的一并压入栈。然后遇到一个温度比较高。开始从栈顶逐个弹出,修改数值。重复操作即可
代码二:倒查法
import bisect
class Solution:
def dailyTemperatures(self, T):
"""
:type T: List[int]
:rtype: List[int]
"""
if not T:
return T
res = [0] * len(T)
res[len(T)-1] = 0
curr_highest = T[-1]
#倒叙查找
for i in range(len(T)-2, -1, -1):
# 是不是最高的
if T[i] >= curr_highest:
res[i] = 0
curr_highest = T[i]
# 更高值是不是在下一个索引
elif T[i] < T[i+1]:
res[i] = 1
# 根据索引找到可能的更高值
else:
next_warmer_day = i + 1 + res[i+1]
while T[next_warmer_day] <= T[i]:
next_warmer_day += res[next_warmer_day]
# 找到索引值
res[i] = next_warmer_day - i
return res