用单调栈记录下标,先将头个温度下标压入栈,判断栈顶温度是否比当天温度低,低则更新低温的天数弹栈,高则继续压栈,这样栈里面的温度必定是递减的,一遇到温度高的便可同步更新低温的天数
class Solution {
public:
vector<int> dailyTemperatures(vector<int> &temperatures) {
vector<int> ans(temperatures.size()); // 默认为0
stack<int> index; // 存储下标
for (int i = 0; i < temperatures.size(); i++) {
while (!index.empty() && temperatures[index.top()] < temperatures[i]) { // 找到比前面温度高的
ans[index.top()] = i - index.top(); // 更新前面温度低的天数
index.pop();
}
index.push(i); // 将温度低的压入栈
}
return ans;
}
};