给定一个每日temperatures
的列表,产生一个列表,对于输入的每天,告诉我们你要等多少天才能够等到一个更高的温度。如果没有可能的未来日期,输出0作为替代。
比如,给定列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73]
,你的输出应该是[1, 1, 4, 2, 1, 1, 0, 0]
。
样例
样例 1:
输入: temperatures = [73, 74, 75, 71, 69, 72, 76, 73]
输出: [1, 1, 4, 2, 1, 1, 0, 0]
解释:
找到每个数字后面第一个大于自己的数字,输出两者的距离。
样例 2:
输入: temperatures = [50, 40, 39, 30]
输出: [0,0,0,0]
注意事项
temperatures
的长度应该在[1, 30000]
范围内。每一个温度应该是一个在[30, 100]
内的整数。
class Solution {
public:
/**
* @param temperatures: a list of daily temperatures
* @return: a list of how many days you would have to wait until a warmer temperature
*/
vector<int> dailyTemperatures(vector<int> &T) {
// Write your code here
vector<int> ans(T.size());
stack<int> s; // 这里放元素索引,而不是元素
for (int i = T.size() - 1; i >= 0; i--) {
while (!s.empty() && T[s.top()] <= T[i]) {
s.pop();
}
ans[i] = s.empty() ? 0 : (s.top() - i); // 得到索引间距
s.push(i); // 加入索引,而不是元素
}
return ans;
}
};