[739] 每日温度
📝 题目描述
难度: 🟡 中等
标签:数组单调栈
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
示例 1:
输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
示例 2:
输入: temperatures = [30,40,50,60]
输出: [1,1,1,0]
示例 3:
输入: temperatures = [30,60,90]
输出: [1,1,0]
� 解题思路
设置一个单调栈,并从左往右遍历。
如果栈顶元素大于等于当前的元素,那么压入栈;
否则,说明当前元素为一个更大的数字,将栈中小于该数的元素全部弹出并写入索引之差,然后把当前元素压入栈。
重复以上步骤。
� 代码实现
cpp
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
vector<int> res(temperatures.size(),0);
stack<int> stk;
for(int i=0;i<temperatures.size();i++){
while(!stk.empty() &&temperatures[stk.top()]<temperatures[i]){
res[stk.top()]=i-stk.top();
stk.pop();
}
stk.push(i);
}
return res;
}
};
📊 复杂度分析
每个元素最多入栈+出栈一次,时间复杂度为2n,使用额外的n空间存储结果和单调栈。
- 时间复杂度: O(n)
- 空间复杂度: O(n)
日期: 2026-4-29