zoukankan      html  css  js  c++  java
  • 每日温度

    题意

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

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

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

    思路

    利用栈来对数组下标做操作,开一个和数组同样大小的数组,并且值都设为0,遍历原数组,如果栈为空,或者栈顶元素(下标)对应的值大于当前元素,(不是栈顶对应元素的下一个最大值,所以整体上是维持了一个递减栈)就将元素下标入栈,如果栈顶元素(下标)对应的值小于当前元素,那么当前元素肯定是第一个比它大的元素,这样就利用栈找到了下一个比它大的元素,按照题意记录结果即可。

    代码

    class Solution {
    public:
        vector<int> dailyTemperatures(vector<int>& T) {
            int len=T.size();
            vector<int> ans(len,0);
            stack<int> st;   //为啥总是忘记设置stack
            for(int i=0;i<len;i++){
                while(!st.empty() && T[st.top()]<T[i]){
                    //当栈不为空并且比栈顶元素大的时候,弹出栈顶元素,记录下标差
                    int temp=st.top();
                    st.pop();
                    ans[temp]=i-temp;
                }
                //直到不满足上述条件,st为空,或者直到遇到比自己大的元素,入栈
                st.push(i);
            }
            return ans; //开始的时候初始化为0,所以后面栈里的剩余元素还是0
        }
    };
    
    
  • 相关阅读:
    linux学习笔记
    HDMI之CEC DDC学习笔记(可能有误)
    MAP按照value排序
    Map遍历四种方法
    Java native方法
    [PAT] 1143 Lowest Common Ancestor (30 分)Java
    [PAT] 1148 Werewolf
    [PAT] 1096 Consecutive Factors (20 分)Java
    [PAT] 1092 To Buy or Not to Buy (20 分)Java
    [PAT] 1088 Rational Arithmetic (20 分)Java
  • 原文地址:https://www.cnblogs.com/Bipolard/p/10173258.html
Copyright © 2011-2022 走看看