题解 力扣 LeetCode 739 每日温度 C++

时间:2024-10-31 22:01:18

 题目传送门:

739. 每日温度 - 力扣(LeetCode)https://leetcode.cn/problems/daily-temperatures/description/

思路:

就是单调栈的思路,具体见代码

不知道单调栈的,可以看我的这篇文章:

数据结构 单调栈-****博客https://blog.****.net/qwq_ovo_pwp/article/details/143243268?spm=1001.2014.3001.5501代码:

class Solution
{
public:
    vector<int> dailyTemperatures(vector<int>& temperatures)
    {
        int top = -1, stk[100010] = { 0 };
        vector<int> ret(temperatures.size(), 0);//该思路要求一开始全初始化为0
        for (int i = temperatures.size() - 1; i >= 0; i--)//从末尾开始遍历思路和代码更简洁
        {
            //栈stk用于存放遍历过的元素的下标
            //每次将当前元素与栈顶元素比较,若栈顶元素小于当前元素,那么可以直接出栈,理由在单调栈实现里讲到了
            while (top > -1 && temperatures[stk[top]] <= temperatures[i]) top--;
            if (top > -1) ret[i] = stk[top] - i;
            //else不用写,因为此时ret[i]=0,一开始已经全初始化为0了
            stk[++top] = i;
        }
        return ret;
    }
};