zoukankan      html  css  js  c++  java
  • 刷题739. Daily Temperatures

    一、题目说明

    题目739. Daily Temperatures,返回一列数,改天要等多少天才能升温。难度是Medium!

    二、我的解答

    这个题目,用dp解决非常方便:

    class Solution{
    	public:
    		vector<int> dailyTemperatures(vector<int>& T){
    			int len = T.size();
    			vector<int> dp(len,0);
    			dp[len-1] = 0;
    			for(int i=len-2;i>=0;i--){
    				if(T[i]<T[i+1]){
    					dp[i] = 1;
    				}else if(T[i]==T[i+1]){
    					if(dp[i+1]==0){
    						dp[i] = 0;
    					} else{
    						dp[i] = dp[i+1] + 1;
    					}
    				}else{
    					for(int j=i+2;j<len;j++){
    						if(T[i]<T[j]){
    							dp[i] = j-i;
    							break;
    						}
    					}
    				}
    			}
    			return dp; 
    		}
    };
    

    性能如下:

    Runtime: 664 ms, faster than 5.08% of C++ online submissions for Daily Temperatures.
    Memory Usage: 14.7 MB, less than 100.00% of C++ online submissions for Daily Temperatures.
    

    三、优化措施

    用一个单调递增栈,可以减少比较的次数:

    class Solution{
    	public:
    		//promte by stack
    		vector<int> dailyTemperatures(vector<int>& T){
    			int len = T.size();
    			vector<int> res(len,0);
    			stack<int> st;
    			for(int i=0;i<len;i++){
    				while(! st.empty() && T[st.top()]<T[i]){
    					res[st.top()] = i - st.top();
    					st.pop();
    				}
    				st.push(i);
    			}
    			return res; 
    		}
    };
    

    性能如下:

    Runtime: 188 ms, faster than 90.99% of C++ online submissions for Daily Temperatures.
    Memory Usage: 16.1 MB, less than 68.00% of C++ online submissions for Daily Temperatures.
    
    所有文章,坚持原创。如有转载,敬请标注出处。
  • 相关阅读:
    [Linux] Ubuntu Server18 python3.7 虚拟环境
    [Linux] 树莓派编译python3.7.4
    [Linux] TMUX Python版本设置
    Linux 批量杀进程的命令
    arm树莓派Raspbian 下安装selenium+chrome
    树莓派Raspbian系统密码
    mac 终端查看端口命令
    selenium firefox 内存 速度优化
    [Linux] tmux 终端复用命令行工具
    通过 ssh 登录到手机 Termux
  • 原文地址:https://www.cnblogs.com/siweihz/p/12304692.html
Copyright © 2011-2022 走看看