华为od机试真题:查找接口成功率最优时间段(Python)

alt

题目描述

服务之间交换的接口成功率作为服务调用关键质量特性,某个时间段内的接口失败率使用一个数组表示。

数组中每个元素都是单位时间内失败率数值,数组中的数值为0~100的整数,

给定一个数值(minAverageLost)表示某个时间段内平均失败率容忍值,即平均失败率小于等于minAverageLost.找出数组中最长时间段,

如果未找到则直接返回NULL。

输入描述

有两行内容,

第一行为 minAverageLost,

第二行为数组,数组元素通过空格(" ")分隔,

minAverageLost及数组中元素取值范围为0~100的整数,数组元素的个数不会超过100个

输出描述

找出平均值小于等于minAverageLost的最长时间段,输出数组下标对,格式{beginIndex}-{endIndex} (下标从0开始),

如果同时存在多个最长时间段,则输出多个下标对且下标对之间使用空格(” “)拼接,多个下标对按下标从小到大排序。

示例1

输入:
1
0 1 2 3 4

输出:
0-2

说明:
A、输入解释:minAverageLost=1,数组[0, 1, 2, 3, 4]
B、前3个元素的平均值为1,因此数组第一个至第三个数组下标,即0-2

示例2

输入:
2
0 0 100 2 2 99 0 2

输出:
0-1 3-4 6-7

说明:
A、输入解释:minAverageLost=2,数组[0, 0, 100, 2, 2, 99, 0, 2]
B、通过计算小于等于2的最长时间段为:数组下标为0-1即[0, 0],数组下标为3-4即[2, 2],数组下标为6-7即[0, 2],这三个部分都满足平均值小于等2的要求,因此输出0-1 3-4 6-7

题解

解题思路:

  1. 输入最小平均失败率和失败率数据。
  2. 使用前缀和数组 psum 记录从头开始到每个位置的失败率累加和。
  3. 使用两层循环遍历所有可能的时间段,通过前缀和数组判断平均失败率是否小于等于给定的阈值。
  4. 如果找到一个满足条件的时间段,比较其长度是否大于当前已知的最大长度,更新最大长度和结果数组。
  5. 最终输出所有满足条件的最长时间段。

Python

# 输入最小平均失败率
min_average_lost = int(input())

# 输入失败率数据
losts = list(map(int, input().split()))

n = len(losts)

# 计算前缀和数组 psum,psum[i] 表示从数组开始到位置 i-1 的累加和
psum = [0] * (n + 1)
for i in range(n):
    psum[i + 1] = psum[i] + losts[i]

max_length = 1  # 记录当前找到的最长时间段的长度,初始化为1
result = []  # 存储满足条件的最长时间段的下标对

# 寻找最长时间段
for l in range(n):
    for r in range(l + max_length - 1, n):
        length = r - l + 1  # 当前时间段的长度
        # 通过前缀和计算 losts[l ~ r] 区间的累加和并判断平均失败率是否小于等于 min_average_lost
        if psum[r + 1] - psum[l] <= min_average_lost * length:
            # 找到更长的时间段,更新 max_length 并清空结果数组
            if length > max_length:
                max_length = length
                result.clear()
                result.append((l, r))
            elif length == max_length:  # 如果有多个同样长度的时间段,添加到结果数组
                result.append((l, r))

# 打印输出结果
# 按照要求输出格式:{beginIndex}-{endIndex} 并用空格分隔多个结果
for p in result:
    print(f"{p[0]}-{p[1]}", end=" ")

2024华为OD机试(C卷+D卷)最新题库【超值优惠】Java/Python/C++合集

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

#面经##秋招##春招##校招##华为#
全部评论

相关推荐

咩咩子_:你到底想好了做什么吗?嵌入式,前端后端咋都有,项目介绍也不清楚。
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务