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;
    }
};

 

posted @ 2021-07-25 11:09  三一一一317  阅读(27)  评论(0)    收藏  举报