LeetCode热题100--739. 每日温度--中等

题目

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 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]

题解

java 复制代码
class Solution {
    public int[] dailyTemperatures(int[] T) {
        int length = T.length;
        int[] result = new int[length];

        //从右向左遍历
        for (int i = length - 2; i >= 0; i--) {
            // j+= result[j]是利用已经有的结果进行跳跃
            for (int j = i + 1; j < length; j+= result[j]) {
                if (T[j] > T[i]) {
                    result[i] = j - i;
                    break;
                } else if (result[j] == 0) { //遇到0表示后面不会有更大的值,那当然当前值就应该也为0
                    result[i] = 0;
                    break;
                }
            }
        }
    return result;
    }
}

解析

出自:每日温度 - Java

java 复制代码
public int[] dailyTemperatures(int[] T) { ... }   //定义一个方法,它接受一个整型数组并返回另一个整型数组。

int length = T.length; 
int[] result = new int[length];  //初始化我们的"result"数组,并给它分配输入数据的大小和维度。

for (int i = length - 2; i >= 0; i--) { ... }   //我们反着读取我们的"T"数组,从最后一个元素到第一个。这是为了能够利用我们已经做过的计算来跳过我们不需要再次做的计算(例如在同一迭代中找出更大的值的检查和赋值)。

for (int j = i + 1; j < length; j+= result[j]) { ... }  //这个循环试图找到T中的下一个较大的气温,它使用了我们已经计算过的值来跳过某些索引。我们每次增加`result[j]`是基于前面的结果(可能对同一迭代来说可能是零)

if (T[j] > T[i]) { ... } //如果当前的'j'索引上的值大于我们的'i'索引,我们计算出间隔并将其赋给我们的result数组中的'i'索引。
else if (result[j] == 0)  {...}//否则如果在接下来的索引上找不到更大的值(前面的循环已经处理了这个情况),我们认为该天的温度"没有等待更多的天数".

return result;   //这行代码完成整个函数。它将我们的结果数组作为输出返回给调用者。
相关推荐
小白程序员成长日记2 小时前
2025.12.11 力扣每日一题
数据结构·算法·leetcode
一碗白开水一2 小时前
【论文阅读】Denoising Diffusion Probabilistic Models (DDPM)详细解析及公式推导
论文阅读·人工智能·深度学习·算法·机器学习
代码游侠2 小时前
学习笔记——进程
linux·运维·笔记·学习·算法
是Dream呀2 小时前
多样化算力使能:openFuyao引领算力池化与调度革命
人工智能·python·算力
天赐学c语言2 小时前
12.11 - 最长回文子串 && main函数是如何开始的
c++·算法·leetcode
CoovallyAIHub2 小时前
AI模型训练有哪些关键步骤与必备工具?从概念到可运行的智能模型
深度学习·算法·计算机视觉
程序员-King.2 小时前
day122—二分查找—完成旅途的最少时间(LeetCode-2187)
算法·leetcode·二分查找·双指针
暗之星瞳2 小时前
线性回归+实例
算法·回归·线性回归
little~钰2 小时前
整体二分——上
算法