华为OD机试真题-查找接口成功率最优时间段-2023年OD统一考试(C卷)--Python3--开源

题目:
在这里插入图片描述

考察内容:
for + 时间窗口+list(append, sum, sort)+ join
代码:

"""
题目分析:

最长时间段
且平均值小于等于minLost

同时存在多个时间段,则输出多个,从大到小排序

未找到返回 NULL
输入:
int minAveragetLost
list

输出:

数组下标对 beginIndex-endIndex

eg:
1
0 1 2 3 4

2
0 0 100 2 2 99 0 2

3
0 0 0 20 2 3 4 100 0 0 0 0
思路:
不能排序,排序会打乱之前的顺序
sum + for

"""
# min_average_lost = int(input())
# input_list = list(map(int, input().split()))
#
# temp = [0, 0]
# left = 0
# res_list = list()
# for left in range(0, len(input_list)):
#     for right in range(left, len(input_list)):
#         sum_temp = sum(input_list[left:right+1])/(right+1-left)
#         if min_average_lost >= sum_temp:
#             temp = [left, right]
#             res_list.append(temp)
#         else:
#             break
#
#
# # print(res_list)
# # 求出最长时间段
# max_windows = 0
# res = list()
# for item in res_list:
#     max_windows = max(max_windows, item[1]-item[0])
# if len(res_list) == 0:
#     print("NULL")
# else:
#     print(" ".join("-".join(map(str, i)) for i in res_list if i[1]-i[0] == max_windows))


# 优化
min_average_lost = int(input())
input_list = list(map(int, input().split()))

temp = [0, 0]
left = 0
res_list = list()
max_windows = 0
for left in range(0, len(input_list)):
    for right in range(left, len(input_list)):
        sum_temp = sum(input_list[left:right+1])/(right+1-left)
        if min_average_lost >= sum_temp:
            temp = [left, right]
            max_windows = max(max_windows, right+1-left)
            res_list.append(temp)
        else:
            # 后续的都不满足条件,左窗口向前移动
            break

# print(res_list, max_windows)
# 这里其实不是排序
res_list.sort(key=lambda x: x[0], reverse=False)
# 求出最长时间段
if len(res_list) == 0:
    print("NULL")
else:
    print(" ".join("-".join(map(str, i)) for i in res_list if i[1]-i[0]+1 == max_windows))
  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值