数据中心最佳维护窗口

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

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

题目描述

某数据中心记录了连续 N 小时内每小时的服务器负载得分,记录在数组 scores 中;0 表示该小时无效(服务器故障)。 需要选择连续 W 小时的窗口作为最佳的维护窗口,满足如下规则:

  1. 窗口内不能包含无效小时
  2. 窗口满足负载得分总和最小;若存在多个,选取起始小时最早的
  3. 不存在满足条件的窗口时,输出 [−1,0]

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

输入描述

N:总小时数 (1≤N≤100000)

W:窗口长度 (1≤W≤min(N,10000))

scores:长度为 N 的数组,第 i 个值表示第 i 小时负载得分 (0≤scores[i]≤1000)

输出描述

包含 2 个整数的数组 — [起始小时编号, 最小负载总和] 或 [−1,0]

示例1

输入

9
2
10,5,20,10,5,15,10,5,25

输出

0,15

说明

3 个窗口([0,1],[3,4],[6,7])总得分都是 15,所以选最早的从 0 开始,得分是 15

示例2

输入

5
3
0,5,0,8,12

输出

-1,0

说明

找不到连续 3 小时的维护窗口,所以输出 [−1,0]

示例3

输入

12
4
10,2,1,0,15,0,8,3,6,12,6,9

输出

8,17

说明

有效窗口:[8,9,10,11]=[3,6,12,6],得分17

解题思路

本题是一个 滑动窗口 问题,需要在长度为 N 的数组中找到长度为 W 的连续子数组,要求该子数组:

  1. 不包含任何 0 元素(所有小时都有效)
  2. 在所有满足条件的窗口中,选择总得分最小的
  3. 若有多个最小值,选择起始位置最早的

关键点:

  • 使用滑动窗口维护当前窗口内的元素和与0的个数
  • 当窗口内0的个数为0时,该窗口是有效的
  • 在有效窗口中选择sum最小的

算法步骤:

  1. 初始化第一个窗口,计算窗口和与0的个数
  2. 如果首个窗口有效且sum更小,更新最优结果
  3. 滑动窗口:移出左边元素,加入右边元素
  4. 重复检查并更新最优结果

复杂度:

  • 时间:O(N),每个元素最多遍历两次
  • 空间
THE END