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] 范围内的整数。

    /*
    暴力法不考虑。
    
    思路很重要:这道题因为前面元素一旦用到就不再使用,有可能用到栈。递增递减类问题,考虑使用递增栈递减栈。
    73 < 74,73之后便不再使用了,小的元素不再使用了(pop),因此极有可能是递减栈,那么就从递减栈开始尝试。
    单调栈:
    开始:维护递减栈,保持下大上小。比对当前元素与栈顶元素的大小:
    case1:当前元素 > 栈顶元素:弹出栈顶元素,这时候两者下标差值即为所求天数,弹出后可能依然当前元素 > 栈顶元素,那么继续弹出,下标差依然是所求天数,因此用while;
    case2:当前元素 <= 栈顶元素:入栈,不需要做其他操作。
    */
    #include <iostream>
    #include <string.h>
    #include <vector>
    #include <stack>
    #include <algorithm>//min()包含头文件
    using namespace std;
    
    vector<int> dailyTemperatures(vector<int>& T) {
            int size = T.size();
            vector<int> res(size,0);
            stack<int> tmp;
            for(int i=0;i<size;i++)
            {
                if(tmp.empty()) tmp.push(i);
                else if(T[tmp.top()]>=T[i])tmp.push(i);
                else 
                {
                    while(!tmp.empty()&&T[tmp.top()]<T[i])
                    {
                        res[tmp.top()]=i-tmp.top();
                        tmp.pop();
                    }
                    tmp.push(i);
                }
                
            }   
            return res;
            
        }
    
    
    
    
    int main(){
        vector<int> T(10);
        T[0]=73;
        T[1]=74;
        T[2]=75;
        T[3]=71;
        T[4]=69;
        T[5]=72;
        T[6]=76;
        T[7]=73;
        // vector<int> T = {73, 74, 75, 71, 69, 72, 76, 73};
    
        vector<int> res = dailyTemperatures(T);
    
        string s= "abbab";
    
        string long_str = longestPalindrome(s);
        int num = countSubstrings(s);
    
    
        cout<<long_str<<endl;
        
        cout<<num<<endl;
    
    
        for (int i=0;i<res.size();i++){
            cout<<" "<<res[i];
        }
    
        cout<<endl;
    
    
        return 0;
    }
    

      

  • 相关阅读:
    python 的 类属性 与 实例属性
    python 的 append 和 extend
    机器学习的最佳入门学习资源
    各种排序算法探讨与实现
    C++基础:C++中vector使用简介
    C++基础:C++中的explicit关键字
    差分约束(poj 1201
    codeforeces 547C
    2015 7月 做题记录
    set&map
  • 原文地址:https://www.cnblogs.com/Allen-rg/p/13424818.html
Copyright © 2011-2022 走看看