数据中心最佳维护窗口
2026 华为OD机试真题 6月17日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
某数据中心记录了连续 N 小时内每小时的服务器负载得分,记录在数组 scores 中;0 表示该小时无效(服务器故障)。 需要选择连续 W 小时的窗口作为最佳的维护窗口,满足如下规则:
- 窗口内不能包含无效小时
- 窗口满足负载得分总和最小;若存在多个,选取起始小时最早的
- 不存在满足条件的窗口时,输出 [−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 的连续子数组,要求该子数组:
- 不包含任何 0 元素(所有小时都有效)
- 在所有满足条件的窗口中,选择总得分最小的
- 若有多个最小值,选择起始位置最早的
关键点:
- 使用滑动窗口维护当前窗口内的元素和与0的个数
- 当窗口内0的个数为0时,该窗口是有效的
- 在有效窗口中选择sum最小的
算法步骤:
- 初始化第一个窗口,计算窗口和与0的个数
- 如果首个窗口有效且sum更小,更新最优结果
- 滑动窗口:移出左边元素,加入右边元素
- 重复检查并更新最优结果
复杂度:
- 时间:O(N),每个元素最多遍历两次
- 空间
版权声明:
作者:魔改工程师
链接:https://www.sylblog.xin/archives/667
文章版权归作者所有,未经允许请勿转载。
THE END