【leetcode刷题】T27-每日温度

2019-07-18 09:53:52 浏览数 (1)

【英文题目】(学习英语的同时,更能理解题意哟~)

Given a list of daily temperatures T, return a list such that, for each day in the input, tells you how many days you would have to wait until a warmer temperature. If there is no future day for which this is possible, put 0 instead.

For example, given the list of temperatures T = [73, 74, 75, 71, 69, 72, 76, 73], your output should be [1, 1, 4, 2, 1, 1, 0, 0].

Note: The length of temperatures will be in the range [1, 30000]. Each temperature will be an integer in the range [30, 100].

【中文题目】

根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数。如果之后都不会升高,请输入 0 来代替。

例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]

提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的都是 [30, 100] 范围内的整数。

【思路】

本题和【T25-下一个更大元素 I】【T26-下一个更大元素 II】基本类似,使用栈保持栈顶元素到栈底元素从小到大,当遍历元素e时,若e大于栈顶元素,则弹出栈,并计算天数,否则压入栈。

值得注意的是:一定要使用while循环对元素e和栈顶元素的大小进行判断,而不是只判断一次。

【代码】

python版本

代码语言:javascript复制
class Solution(object):
    def dailyTemperatures(self, T):
        """
        :type T: List[int]
        :rtype: List[int]
        """
        res = [] * len(T)
        ls = []
        for i, Ti in enumerate(T):
            while len(ls) >  and T[ls[-1]] < Ti:
                j = ls.pop()
                res[j] = i - j
            ls.append(i)
        return res

C 版本

代码语言:javascript复制
class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& T) {
        stack<int> ls;
        ls.push();
        vector<int> res(T.size(), );
        for(int i=; i<T.size(); i  ){
            while(ls.size() >  && T[ls.top()] < T[i]){
                int j = ls.top();
                ls.pop();
                res[j] = i-j;
            }
            ls.push(i);
        }
        return res;
    }
};

0 人点赞