739. 每日温度

问题

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

示例 1:

输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]

分析

暴力,枚举,两个for循环,尝试发现会超时。

单调栈模板题。

法一、暴力,超时,47/48.

class Solution {
public:
    vector<int> res;
    int q_n;
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        this->q_n = temperatures.size();
        res.resize(q_n, 0);
        for (int i = 0; i < q_n; i++) {
            int k = 0;
            for (int j = i+1; j < q_n; j++) {
                if (temperatures[j] > temperatures[i]) {k = j; break;}
            }
            k == 0 ? res[i] = 0 : res[i] = k-i;
        }
        return res;
    }
};

法二、单调栈

模板题。

class Solution {
public:
    vector<int> res;
    int q_n;
    stack<pair<int, int> > stk; // val, index
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        this->q_n = temperatures.size();
        res.resize(q_n, 0);
        for (int i = 0; i < q_n; i++) {
            while(!stk.empty() && stk.top().first < temperatures[i]) {
                int x = stk.top().second;
                res[x] = i - x;
                stk.pop();
            }
            stk.push(make_pair(temperatures[i], i));
        }
        return res;
    }
};
posted @ 2025-06-15 02:14  saulstavo  阅读(14)  评论(0)    收藏  举报