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

    /**
     * @Class DailyTemperatures
     * @Description 
     * 请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数
     * 如果气温在这之后都不会升高,请在该位置用 0 来代替。
     * <p>
     * 例如,给定一个列表temperatures= [73, 74, 75, 71, 69, 72, 76, 73],
     * 你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
     * <p>
     * 提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。
     * @Author 10256137
     * @Date 2020/6/11
     **/
     public class DailyTemperatures {
     }
    
    /*    //解法1: 暴力求解,最后一个不需要判断,肯定为0
    public int[] dailyTemperatures(int[] T) {
    	if (T == null || T.length == 0) {
    		return null;
    	}
    
    	int[] date = new int[T.length];
    	int i = 0,j =0;
    	for (i = 0; i < T.length; i++) {
    		date[i] = 0;
    		for (j = i+1; j < T.length; j++) {
    			if (T[i] < T[j]) {
    				date[i] = j-i;
    				break;
    			}
    		}
    	}
    	return date;
    }*/
    
    /*    // 解法2: 利用已有结果
    public int[] dailyTemperatures(int[] T) {
    	if (T == null || T.length == 0) {
    		return null;
    	}
    
    	// 从右向左遍历
    	int[] result =  new int[T.length];
    
    	for (int i = T.length-2; i >= 0 ; i--) {
    		// [73, 74, 75, 71, 69, 72, 76, 73]
    		// 可以利用已有结果,跳过部分比较,以计算[75]为例,此时已计算号[71]=2,
    		// 下次再比较时就可以跳过[71]对比的2个元素,直接比较[72]
    		// 对于某个元素的result为0的情况,说明后面没有比该元素更大的值了,可以直接结束
    		for (int j = i+1; j < T.length ; j+= result[j]) {
    			if(T[j] > T[i]){
    				result[i] = j-i;
    				break;
    			}
    			else if(result[j] == 0){
    				//对于result[j]为0的情况,说明T[j]之后没有比T[j]大的元素了
    				result[i] = 0;
    				break;
    			}
    		}
    	}
    	return  result;
    }*/
    
    // 利用栈的形式,只需要遍历一遍
    public int[] dailyTemperatures(int[] T) {
        if (T == null || T.length == 0) {
            return null;
        }
        int top = -1;           // 保存栈顶位置,
        int[] stack = new int[T.length];  // 保存的是元素下标
        int[] res = new int[T.length];
        for (int i = 0; i < T.length; i++) {
            //            stack[++top] = i;  // 放在此处就等于T[stack[top]] == T[i] 一直成立了
            // 比较栈顶元素和当前元素
            while (top>=0 && T[stack[top]] <T[i]){
                int idx = stack[top--];         // 获取栈顶位置对应的元素下标
                res[idx] = i- idx;
            }
            stack[++top] = i;
        }
        return res;
    }
    
  • 相关阅读:
    springnodejs
    js CacheQueue
    权重练习
    架构师速成8.3-可用性之分库分表
    架构师速成8.3-可用性之分布式
    架构师速成8.3-可用性
    架构师速成8.3-架构师必须要了解的规则(转)
    架构师速成6.15-开发框架-单点登录
    架构师速成6.14-开发框架-异常处理
    架构师速成6.13-开发框架-前后结合
  • 原文地址:https://www.cnblogs.com/fyusac/p/13098416.html
Copyright © 2011-2022 走看看