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;   //这行代码完成整个函数。它将我们的结果数组作为输出返回给调用者。
相关推荐
偷吃的耗子25 分钟前
【CNN算法理解】:CNN平移不变性详解:数学原理与实例
人工智能·算法·cnn
亓才孓29 分钟前
[Class类的应用]反射的理解
开发语言·python
小镇敲码人38 分钟前
深入剖析华为CANN框架下的Ops-CV仓库:从入门到实战指南
c++·python·华为·cann
摘星编程1 小时前
深入理解CANN ops-nn BatchNormalization算子:训练加速的关键技术
python
魔芋红茶1 小时前
Python 项目版本控制
开发语言·python
lili-felicity1 小时前
CANN批处理优化技巧:从动态批处理到流水线并行
人工智能·python
一个有梦有戏的人1 小时前
Python3基础:进阶基础,筑牢编程底层能力
后端·python
dazzle1 小时前
机器学习算法原理与实践-入门(三):使用数学方法实现KNN
人工智能·算法·机器学习
那个村的李富贵1 小时前
智能炼金术:CANN加速的新材料AI设计系统
人工智能·算法·aigc·cann
摘星编程1 小时前
解析CANN ops-nn中的Transpose算子:张量维度变换的高效实现
python