Given a list of daily temperatures
, produce a list that, for each day in the input, tells you how many days you would have to wait until a warmer temperature. If there is no future day for which this is possible, put 0
instead.
For example, given the list temperatures = [73, 74, 75, 71, 69, 72, 76, 73]
, your output should be [1, 1, 4, 2, 1, 1, 0, 0]
.
Note:The length of temperatures
will be in the range [1, 30000]
.Each temperature will be an integer in the range [30, 100]
.
问题相当于:给出一个数组,对每个位置,在当前位置后面找出最近的比当前位置大的数,求出位置差。想法是维护一个降序的栈,当出现比栈中一些数大的数的时候,把那些数出栈,并保存好位置差,然后把当前的数压入栈,这样就可以实现要求。
代码:
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
stack<pair<int, int>> rest;
vector<int> res(temperatures.size(), 0);
for(int i = 0; i < temperatures.size(); ++i) {
if(!res.empty()) {
while(!rest.empty()) {
pair<int, int> r = rest.top();
if(r.second >= temperatures[i]) break;
rest.pop();
res[r.first] = (i - r.first);
}
}
rest.push(make_pair(i, temperatures[i]));
}
return res;
}
};