**查找温度记录统计信息**

2026 华为OD机试真题 6月10日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

题目描述

新能源电站配备了多个温度传感器,用于监测关键设备的运行温度,需要定期分析温度数据:找出历史最高温度记录,并检测是否存在温度异常升高的危险时段。

"危险时段" 定义为一段连续k个时间点的温度严格单调递增,且该时段内温度升高总幅度 ≥ 阈值t,这样的时段被标记为设备存在过热风险。

给定一个整数数组 temperatures,其中 temperatures[i] 表示第i个时间点的温度记录,请完成以下任务:

  1. 找出最高温度值及其首次出现的下标位置
  2. 统计所有 "危险时段" 的数量
  3. 找出温度升高幅度最大的 "危险时段" 的起始和结束位置

2026 华为OD机试真题 6月10日华为OD上机新系统考试真题 100 分题型

输入描述

  • temperatures: int[],温度记录序列,1 ≤ 长度 ≤ 10000-100 ≤ temperatures[i] ≤ 100

  • k: int,危险时段所需的连续点数,2 ≤ k ≤ temperatures.length

  • t: int,连续升高的温度差值阈值,0 < t ≤ 100

输出描述

int[],长度为 5 的数组:[最高温度值, 最高温度首次出现下标, 危险时段数量, 最大危险时段起始位置, 最大危险时段结束位置]

补充说明

  • 严格单调递增:temperatures[i] < temperatures[i+1] < ... < temperatures[i+k-1]
  • 若无危险时段,起始和结束位置均返回 -1
  • 若多个危险时段升高幅度相同且最大,取起始位置最小的那个
  • 下标从 0 开始计数

示例1

输入

8
20,25,30,28,35,40,42,25
3
10

输出

42,6,2,3,5

说明

最高温度 42 度,出现在位置 6

危险时段检测(k=3,t=10):

  • 位置 0−2:20→25→30,升高 10度 (≥10) ✓ 危险时段1
  • 位置3−5:28→35→40,升高 12 度 (≥10) ✓ 危险时段 2
  • 位置 4−6:35→40→42,升高 7 度 (<10) ✗ 不是危险时段
  • 其他时段不满足条件

危险时段数量:2 个

升高幅度最大:位置 3−5(12 度)

示例2

输入

3
10,15,20
3
30

输出

20,2,0,-1,-1

说明

  • 位置 0−2:10→15→20(<30) 非危险时段
  • 最高温度是20,位置下标为 2
  • 危险时段 0个
  • 危险时段起始位置为 −1,结束位置为 −1

示例3

输入

6
1, 3, 6, 2, 4, 7
3
5

输出

7,5,2,0,2

说明

最高温度值:7

最高温度首次出现下标:5

危险时段检测(k=3,t=5):

  • 位置0−2:1→3→6,升高5 度(≥5)✓ 危险时段 1
  • 位置 3−5:2→4→7,升高 5 度 (≥5)✓ 危险时段 2

危险时段数量:2

最大危险时段起始位置:0(2 个相同最大温差,取第 1 个危险时段起始下标返回)

最大危险时段结束位置:2

解题思路

本题是一个 滑动窗口 问题,主要包含三个任务:

  1. 查找最高温度:线性扫描数组,记录最大值及其首次出现位置
  2. 检测危险时段:使用滑动窗口检测连续 k 个时间点是否严格单调递增
  3. 找出最大危险时段:在所有满足条件的危险时段中,根据升温幅度和起始位置选择最优时段

关键规则:

  • 危险时段必须是连续 k 个温度严格单调递增(相邻温度必须满足 temperatures[i] < temperatures[i+1]
  • 升温幅度 = 最后一个温度 - 第一个温度
  • 升温幅度必须 ≥ 阈值 t
  • 若多个危险时段升温幅度相同,取起始位置最小的那个

算法步骤:

  1. 找最高温度:线性扫描一次,记录最大值和首次出现下标
  2. 检测危险时段:使用滑动窗口,遍历所有可能的起始位置
    • 对每个起始位置 i,检查窗口 [i, i+k-1] 是否严格单调递增
    • 计算升温幅度,若 ≥ t 则为危险时段
  3. 记录最优时段:维护最大升温幅度和对应起始位置

复杂度分析

  • 时间复杂度:O(N×K),其中 N 为温度记录数量,K 为窗口大小
  • 空间复杂度:O(1),只使用常
THE END