题目描述: 为了充分发挥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))
结语:越简单的题目解法应该越多,请路过大神留下新的思路供本小白学习一下,打开思路