leetcode 739. 每日温度 (栈+哈希表)

题目链接
在这里插入图片描述
笨方法: 时间超限

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& T) {
        vector<int> ans;
        
        //方法一: 每一个气温都便利一次, n^2复杂度
        for(int i = 0; i < T.size()-1; i++){
            int tmp = 1;
            bool flag = false;
            for(int j = i+1; j < T.size(); j++, tmp++)
                if(T[j] > T[i]){
                    ans.push_back(tmp), flag = true;
                    break;
                }
                    
            if(!flag)
                ans.push_back(0);
        }
        ans.push_back(0); //最后一天
        
        return ans;
    }
};

方法二: 维护递减栈 + 哈希表 + 递归调用判断

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& T) {
        vector<int> ans(T.size());
        stack<int> tmp; //哈希表:储存对应下标
        
        //方法二: 维护递减栈
        for(int i = 0; i < T.size(); i++)
            solve(i, T, ans, tmp);

        return ans;
    }
    
    void solve(int i, vector<int> &T, vector<int> &ans, stack<int> &tmp){
        if(tmp.empty()) {
            tmp.push(i);
            return;
        }//栈为空
        else if(T[i] <= T[tmp.top()]){
            tmp.push(i);
            return;
        }      
        else if(T[i] > T[tmp.top()]){ //大于
            ans[tmp.top()] = i-tmp.top(); //记录一个答案
            tmp.pop();
            solve(i, T, ans, tmp); //递归调用
        }
    }
};

猜你喜欢

转载自blog.csdn.net/a1097304791/article/details/85028926