列表

详情


NC208. 每日温度

描述

根据往后 n 天的天气预报,计算每一天需要等待几天才会出现一次更高的气温,如果往后都没有更高的气温,则用 0 补位。

例如往后三天的气温是 [1,2,3] , 则输出 [1,1,0]

数据范围: ,每天的温度会满足  0 \le dailyTemperatures[i] \le 1000 \

示例1

输入:

[1,2,3]

输出:

[1,1,0]

示例2

输入:

[2,4,5,9,10,0,9]

输出:

[1,1,1,1,0,1,0]

示例3

输入:

[3,1,4]

输出:

[2,1,0]

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 17ms, 内存消耗: 2584KB, 提交时间: 2021-12-07

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param temperatures int整型vector 
     * @return int整型vector
     */
    vector<int> temperatures(vector<int>& temperature) {
        // write code here
        stack<int> s;
        
        int t_size=temperature.size();
        vector<int> res(t_size);
        for(int i=t_size-1;i>=0;i--){
            while(!s.empty() && temperature[i]>=temperature[s.top()]){
                s.pop();
            }
            res[i]=s.empty() ? 0: s.top()-i;
            s.push(i);
        }
        return res;
    }
};

C++ 解法, 执行用时: 17ms, 内存消耗: 2588KB, 提交时间: 2022-01-17

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param temperatures int整型vector 
     * @return int整型vector
     */
    vector<int> temperatures(vector<int>& temperatures) {
        // write code here
        vector<int>result(temperatures.size(),0);
        stack<int>st;
        st.push(0);
        for(int i=1;i<temperatures.size();i++)
        {
            if(temperatures[i]<=temperatures[st.top()])
                st.push(i);
            else 
            {
                while(!st.empty()&&temperatures[i]>temperatures[st.top()])
                {
                    result[st.top()]=i-st.top();
                    st.pop();
                }
                st.push(i);
            }
        }
        return result;
    }
};

C++ 解法, 执行用时: 17ms, 内存消耗: 2712KB, 提交时间: 2021-12-09

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param temperatures int整型vector 
     * @return int整型vector
     */
    vector<int> temperatures(vector<int>& temperatures) {
        int size=temperatures.size();
        vector<int> result(size, 0);
        stack<int> s;
        for(int i=0;i<size;++i) {
            int temp=temperatures[i];
            if(s.empty()) {
                s.push(i);
            }
            else {
                while(!s.empty() && temperatures[s.top()]<temp) {
                    int idx=s.top();
                    s.pop();
                    result[idx]=i-idx;
                }
                s.push(i);
            }
        }

        return result;
    }
};

C++ 解法, 执行用时: 17ms, 内存消耗: 2724KB, 提交时间: 2022-02-12

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param temperatures int整型vector 
     * @return int整型vector
     */
    vector<int> temperatures(vector<int>& temperatures)
    {
        vector<int> ret(temperatures.size(), 0);
        
        stack<int> stk;
        
        for(int i=0; i<temperatures.size(); ++i)
        {
            while(!stk.empty() && temperatures[i] > temperatures[stk.top()])
            {
                ret[stk.top()] = i - stk.top();
                stk.pop();
            }
            stk.push(i);
        }
       
        return ret;
    }
};

C++ 解法, 执行用时: 18ms, 内存消耗: 2584KB, 提交时间: 2022-01-21

class Solution {
public:
    vector<int> temperatures(vector<int> &nums) {
        int t_idx;
        int n = nums.size();
        stack<int> stk;
        vector<int> res(n, 0);
        
        // 从后往前推导
        res[n-1] = 0; stk.push(n-1);
        for(int i = n-2; i >= 0; i--) {
            if(nums[i] < nums[stk.top()]) {
                res[i] = stk.top() - i;
                stk.push(i);
            } else {
                while(!stk.empty() && nums[i] >= nums[stk.top()]) {
                    stk.pop();
                }
                res[i] = (stk.empty() == false) ? (stk.top() - i) : 0;
                stk.push(i);
            }
        }
        
        return res;
    }
};

/*
[1,2,3]
[1,1,0]
[3,1,4]
[2,1,0]
[2,4,5,9,3,10]
[1,1,1,2,1,0]
[2,4,5,9,10,0,9]
[1,1,1,1,0,1,0]
*/

上一题