根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。
例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
提示:气温 列表长度的范围是 [1, 30000]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/daily-temperatures
单调递减栈,每个入栈元素与栈顶元素比较,温度若比他大则入栈,温度若比他小,则下标之差为所需的返回数据。
class Solution {
public:
struct Node{
int index;
int val;
};
vector dailyTemperatures(vector& T) {
vector a;
vector ret(T.size());
stack st;
for (int i = 0; i < T.size(); i++){
a.push_back(Node{i,T[i]});
}
for (auto elem : a){
while (!st.empty() && st.top().val < elem.val){
int diff = elem.index - st.top().index;
ret[st.top().index] = diff;
st.pop();
}
st.push(elem);
}
while (!st.empty()){
ret[st.top().index] = 0;
st.pop();
}
return ret;
}
};