
// class Solution {
// public:
// vector<int> dailyTemperatures(vector<int>& temperatures) {
// vector<int> dp(temperatures.size(), 0);
// // 这个是求最长子序列的
// for(int i = 1; i < temperatures.size(); i++)
// for(int j = 0; j < i; j ++){
// if(temperatures[j] < temperatures[i]){
// dp[i] =max(dp[i], dp[j] + 1);
// }
// }
// int res =INT_MIN;
// for(int i = 0; i < dp.size(); i++){
// res = max(dp[i], res); // 最后res中保存的是最长子序列的长度
// cout<<i<<" :"<<dp[i]<<endl;
// }
// return dp;
// }
// };
// 基于最长子序列更改,但是用例过了33/47,超时。
/*
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
vector<int> dp(temperatures.size(), 0);
for(int i = 1; i < temperatures.size(); i++){
for(int j = 0; j < i; j ++){
if(dp[j]!=0)
continue;
if(temperatures[j] < temperatures[i]){
dp[j] = i-j;
}
}
}
return dp;
}
};
*/
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
// 构造单调递减栈
vector<int> res(temperatures.size(), 0);
stack<int> s;
for(int i = 0; i < temperatures.size(); i++){
while(!s.empty()&&temperatures[i]>temperatures[s.top()]){
int index = s.top();
s.pop();
res[index] = i - index;
}
s.push(i); // 如果为空,或者当前元素不大于栈顶元素,则下标入栈
}
return res;
}
};