leetcode-739. 每日温度
// 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; } };