**查找温度记录统计信息**
2026 华为OD机试真题 6月10日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
新能源电站配备了多个温度传感器,用于监测关键设备的运行温度,需要定期分析温度数据:找出历史最高温度记录,并检测是否存在温度异常升高的危险时段。
"危险时段" 定义为一段连续k个时间点的温度严格单调递增,且该时段内温度升高总幅度 ≥ 阈值t,这样的时段被标记为设备存在过热风险。
给定一个整数数组 temperatures,其中 temperatures[i] 表示第i个时间点的温度记录,请完成以下任务:
- 找出最高温度值及其首次出现的下标位置
- 统计所有 "危险时段" 的数量
- 找出温度升高幅度最大的 "危险时段" 的起始和结束位置
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
解题思路
本题是一个 滑动窗口 问题,主要包含三个任务:
- 查找最高温度:线性扫描数组,记录最大值及其首次出现位置
- 检测危险时段:使用滑动窗口检测连续 k 个时间点是否严格单调递增
- 找出最大危险时段:在所有满足条件的危险时段中,根据升温幅度和起始位置选择最优时段
关键规则:
- 危险时段必须是连续 k 个温度严格单调递增(相邻温度必须满足
temperatures[i] < temperatures[i+1]) - 升温幅度 = 最后一个温度 - 第一个温度
- 升温幅度必须 ≥ 阈值 t
- 若多个危险时段升温幅度相同,取起始位置最小的那个
算法步骤:
- 找最高温度:线性扫描一次,记录最大值和首次出现下标
- 检测危险时段:使用滑动窗口,遍历所有可能的起始位置
- 对每个起始位置 i,检查窗口 [i, i+k-1] 是否严格单调递增
- 计算升温幅度,若 ≥ t 则为危险时段
- 记录最优时段:维护最大升温幅度和对应起始位置
复杂度分析
- 时间复杂度:O(N×K),其中 N 为温度记录数量,K 为窗口大小
- 空间复杂度:O(1),只使用常