题目描述:
给定一个整数数组 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]
提示:
-
1 <= temperatures.length <= 105
-
30 <= temperatures[i] <= 100
使用单调栈的思路
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
vector<int> T(temperatures.size(), 0); // 初始化为 0
stack<int> st;
for (int i = 0; i < temperatures.size(); ++i) {
// 判断栈顶元素是否小于当前温度
while (!st.empty() && temperatures[i] > temperatures[st.top()]) {
// 更新栈顶元素的结果,表示与当前元素的差距
T[st.top()] = i - st.top();
st.pop(); // 弹出栈顶元素
}
st.push(i); // 当前元素的索引入栈
}
return T;
}
};