【华为OD】2024D卷——任务执行时长

题目描述:
为了充分发挥GPU算力,需要尽可能多的将任务交给GPU执行,现在有一个任务数组,数组元素表示在这1秒内新增的任务个数且每秒都有新增任务,
假设GPU最多一次执行n个任务,一次执行耗时1秒,在保证GPU不空闲情况下,最少需要多长时间执行完成

输入描述:
第一个参数为GPU一次最多执行的任务个数,取值范围[1.10000]
第二个参数为任务数组长度,取值范围[1,10000]
第三个参数为任务数组,数字范围[1,10000]

输出描述:
执行完所有任务最少需要多少秒

示例1
输入:
3
5
1 2 3 4 5
输出: 6
说明:
一次最多执行3个任务,最少耗时6s

示例2
输入:
4
5
5 4 1 1 1
输出: 5
说明:
一次最多执行4个任务,最少耗时5s

解题思路:

任务逐秒处理:开始时时间为0秒,剩余任务数为0,GPU每秒能处理n个任务,我们需要检查每秒新增的任务量是否超过n。如果超过,则多出的任务需要延迟到后面处理。

累积剩余任务:如果当前秒内无法完全处理所有新增任务,那么未处理的任务将累积到下一秒一起处理。       

总时间计算:计算每一秒的任务处理情况,直到所有任务都处理完; 每次处理任务都会增加1秒,当遍历完任务数组后,如果还有剩余任务需要处理,则继续计算所需的额外时间


代码部分:

def min_time(n, task_array):
    time = 0
    remaining_tasks = 0
    for tasks in task_array:
        # 每一秒的总任务数 = 新增任务 + 上一秒未完成的任务
        total_tasks = tasks + remaining_tasks
        if total_tasks <= n:
            # 能处理所有任务,重置剩余任务
            remaining_tasks = 0
        else:
            # 处理 n 个任务,剩余任务累积到下一秒
            remaining_tasks = total_tasks - n
        time += 1
    # 如果处理完任务数组后还有剩余任务
    while remaining_tasks > 0:
        remaining_tasks -= n
        time += 1
    return time
num = int(input())
task_num = int(input())
tasks = list(map(int, input().split()))
print(min_time(num, tasks))

结语:越简单的题目解法应该越多,请路过大神留下新的思路供本小白学习一下,打开思路

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值