[leetCode 丶 20241107] LCR 038. 每日温度

原题: LCR 038.每日温度

主站 739.每日温度.


描述:

请根据每日 气温 列表 temperatures,重新生成一个列表,要求其对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。

示例 1

输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]

示例 2

输入: temperatures = [30,40,50,60]
输出: [1,1,1,0]

示例 3

输入: temperatures = [30,60,90]
输出: [1,1,0]

提示

  • 1 <= temperatures.length <= 10^5
  • 30 <= temperatures[i] <= 100

个人版答案

执行用时: 1703 ms 执行内存消耗: 58.23 M

class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        int[] res = new int[temperatures.length];
        for(int i = 0; i+1 < res.length; i ++){
            int next = 0;
            boolean has = false;
            for(int j = i+1; j < res.length; j ++){
                next++;
                if(temperatures[j] > temperatures[i]){
                    has = true;
                    break;
                }
            }
            if(has){
                res[i] = next;
            }else{
                res[i] = 0;
            }
          
        }
        res[temperatures.length-1]=0;
        return res;
    }
}

优秀解法

执行耗时: 8ms

class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        int len = temperatures.length;
        int top = -1;
        int[] stack = new int[len];
        int[] res = new int[len];
        for(int i = 0;i < len;i++){
            int t = temperatures[i];
            while(top != -1 && t > temperatures[stack[top]]){
                res[stack[top]] = i - stack[top];
                top--;
            }
            stack[++top] = i;
        }
        return res;
    }
}

个人解题思路与优秀答案解析

题目分析及个人版思路

  1. 一眼选择排序, 依次对比一下, 如果大于了就停下, 统计下对比次数

进阶版思路
思路一致, 实现看人家代码.

我不服... 哈哈哈哈~ 看不起for咩~ 我可能是因为多了个判断和后续的写入.但是不要紧, 我考虑的更周密.哈哈哈哈哈哈哈哈