华为OD机考双机位C卷 - 最佳升级时间窗(Java & Python & JS & GO & C++ & C)

最佳升级时间窗

2026华为OD机试双机位C卷 - 华为OD上机考试双机位C卷

华为OD机试双机位C卷真题目录点击查看: 【全网首发】2026华为OD机位C卷 机考真题题库含考点说明以及在线OJ(OD上机考试双机位C卷)

题目描述

有一套系统需升级,为减小系统升级期间的影响,需根据系统过去一段时间内的每小时平均访问数据,来预测最佳升级时间窗。

现给长度为168(7*24)的整数数组,表示一个周期(假设从周一00:00到周日24:00)的每小时历史数据,最佳升级时间窗选择规则如下:

1:时间窗内累计用户访问量必须小于等于给定的容忍值。

2:时间窗必须是连续的x个小时,最大的x即为最佳升级时间窗,且不超过7*24.

3:时间窗允许跨周期,例如当前周期的第167小时到下一周期的第166小时,是一个长度为168的时间窗。

请计算最佳升级时间窗,并返回其开始时间和结束时间的数组下标。如果存在多个最佳升级时间窗,返回开始时间下标最小的一个

输入描述

第一行为整数n,表示给定的升级影响的容忍值,取值范围:[0, 2^31]。

第二行为7 * 24个整数,表示一个周期(7*24)的每个小时用户访问量,每个值的范围:[0, 2^31]。

输出描述

两个整数,分别表示所计算出的最佳升级时间窗的开始时间下标(包含)和结束时间下标(包含),不存在时返回 -1 -1 。

示例1

输入

6
1 2 3 4 5 6 7 8 9 10 11 12 12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 11 12 12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 11 12 12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 11 12 12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 11 12 12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 11 12 12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 11 12 12 11 10 9 8 7 6 5 4 3 2 1

输出

22 25

说明

最佳升级窗口为:2 1 1 2

解题思路

核心思想

本题要求在一个长度为 168(7天 x 24小时)的循环数组中,找到最长的连续子数组,使得其和不超过给定的容忍值。

  1. 滑动窗口(Sliding Window)
    • 这是一个经典的滑动窗口问题。我们需要维护一个窗口 [left, right],使得窗口内的元素和 sum 小于等于容忍值 tolerance
    • 为了处理“循环数组”和“跨周期”的问题,我们可以将原数组复制一份拼接到后面,形成一个长度为 336 的数组。这样,跨越末尾的窗口就变成了连续的窗口。
  2. 窗口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值