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
        }
    };
    
    
  • 相关阅读:
    11.变分推断
    10.高斯混合模型GMM
    9.EM 算法
    8.指数族分布
    7.概率图模型(表示/推断/学习)
    6.核方法
    二分查找
    2.3 数据结构---数组(连续)
    C#开发Windows服务的基础代码
    C#与C++之间类型的对应{转}
  • 原文地址:https://www.cnblogs.com/Bipolard/p/10173258.html
Copyright © 2011-2022 走看看