每日温度
分析
维护一个单调递减的栈,从后往前扫一遍。
代码
代码在到处特判。。。。
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& T) {
const int maxn = 1e5 + 10;
int st[maxn];
memset(st, 0, sizeof(st));
int top = -1;
vector<int>ans;
if (!T.size())return ans;
reverse(T.begin(), T.end());
ans.push_back(0);
// 维护一个单调递减的单调栈
st[++top] = 0;
for (int i = 1; i < T.size(); i++) {
if (T[i] >= T[st[top]]) {
while (top >=0 && T[i] >= T[st[top]]) {
top--;
}
if (top==-1) {
ans.push_back(0);
top = 0;
st[top] = i;
continue;
}
else {
ans.push_back(i - st[top]);
}
st[++top] = i;
}
else {
ans.push_back(i - st[top]);
st[++top] = i;
}
}
reverse(ans.begin(), ans.end());
return ans;
}
};