1. 题目解析与解题思路
LeetCode 739题"每日温度"是一道经典的单调栈应用题目。给定一个温度列表,要求返回一个列表,表示需要等待多少天才能等到更高的温度。这道题在面试中经常出现,因为它能很好地考察候选人对数据结构的理解和应用能力。
1.1 问题描述
给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指在第i天之后,才会有更高的温度。如果气温在这之后都不会升高,则在该位置用0来代替。
示例:
输入:temperatures = [73,74,75,71,69,72,76,73]
输出:[1,1,4,2,1,1,0,0]
1.2 暴力解法分析
最直观的解法是使用双重循环:
python复制def dailyTemperatures(temperatures):
n = len(temperatures)
answer = [0] * n
for i in range(n):
for j in range(i+1, n):
if temperatures[j] > temperatures[i]:
answer[i] = j - i
break
return answer
这种方法的时间复杂度是O(n²),在LeetCode上会超时,显然不是最优解。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 单调栈解法详解
2.1 单调栈的概念
单调栈是一种特殊的栈结构,它保证栈内元素始终保持单调递增或单调递减的顺序。在本题中,我们使用单调递减栈,即栈顶元素是最小的。
2.2 算法步骤
- 初始化一个空栈和一个与输入数组等长的结果数组,初始值全为0
- 遍历温度数组中的每一个元素:
a. 当前温度比栈顶温度高时,弹出栈顶元素,并计算天数差存入结果数组
b. 重复上述过程直到栈为空或当前温度不大于栈顶温度
c. 将当前温度的索引入栈 - 返回结果数组
2.3 Python实现代码
python复制def dailyTemperatures(temperatures):
stack = []
