件名の説明:
毎日の温度のリストによると、リストを再構築し、対応する位置を入力します。あなたは、温度がその日の日数を超えて上昇するまで待機する必要がどのくらいです。すべての後、増加していない場合は、代わりの場所に0を使用してください。
例えば、リストの与えられtemperatures = [73, 74, 75, 71, 69, 72, 76, 73]
なければなりませんあなたの出力を[1, 1, 4, 2, 1, 1, 0, 0]
。
ヒント:リストの温度範囲の長さがあります[1, 30000]
。各温度の値は華氏である、ある[30, 100]
範囲の整数。
トピック分析:
入力73は、それがかかり日後翌日、温度を74に上げた場合には、温度上昇まで、対応する結果が1で待機するために。
入力74は、それが必要日後ときに三日目、つまり、温度が上昇するまで待機するために、温度を75に上昇させ、対応する結果が1です。
入力75は、それが温度1日71の後、それを超えるまで待機し続けないことが分かっている他の4日間第天才高い温度まで、温度を76に上昇させ、対応する結果は4です。
入力71は、それが1日69後の温度は、それを超えないように続けることが判明した、た二日待っ第天才温度まで、温度は、対応する結果が2である、72に上げました。
入力69、日後に温度後72発見され、対応する結果が1であり、超えています。
入力72 日後に温度後76発見され、対応する結果が1であり、超えています。
入力76は、フォローアップのない温度が、それを超えることがあり、対応する結果が0です。
入力73は、フォローアップのない温度が、それを超えることがあり、対応する結果が0です。
具体的なコードは次のよう:
t = [73, 74, 75, 71, 69, 72, 76, 73]
def daily_temp(tem):
# 模拟一个递减栈,存放当天的索引
stack = []
# 结果列表,几天后气温才升高
res = [0] * len(tem)
# 循环整个列表
for i in range(len(tem)):
# 当栈不为空且当前天数的气温大于栈顶的气温时,计算栈顶那天过几天气温才会升高
while stack and tem[i] > tem[stack[-1]]:
res[stack[-1]] = i - stack[-1]
# 计算完出栈
stack.pop()
# 栈为空或者没有超过的温度,入栈一个
stack.append(i)
return res
if __name__ == '__main__':
print(daily_temp(t))