739. 每日温度

739. 每日温度

请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。

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

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

单调栈(stack)

  • 考虑从前往后,如果遇到的第一个值比当前的值大,那么就是最少的等待次数。
  • 因此我们需要建立一个单调栈,栈中元素自顶向下是递增的,即最大的元素是在栈底部(出不来)。
  • 出栈规则:当前遍历值比栈顶的值大,那么进行出栈操作,并计算此时栈顶对应值的最少天数。
  • 入栈:每个元素都需要入栈。
class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& T) {
        int n = T.size();
        vector<int> ans(n,0);
        stack<int> mystk;
        for(int i = 0; i < n;++i){
            while(!mystk.empty() && T[mystk.top()] < T[i]){
                int prev = mystk.top();
                mystk.pop();
                ans[prev] = i - prev;
            }
            mystk.push(i);
        }
        return ans;
    }
};
posted @ 2021-04-11 22:14  andymori  阅读(72)  评论(0)    收藏  举报