用Python编写查找完成任务所需的最少时间,同类型任务之间间隔k个时间单位的程序
假设我们有一个名为tasks的整数列表,其中每个项都代表不同的任务类型,我们还有一个非负整数k。每个任务需要一个时间单位来完成,并且必须按照正确的顺序完成任务,但是我们必须在执行两个同一类型的任务之间等待k个时间单位。在任何时候,我们要么可以执行一个任务,要么可以等待。我们必须找出完成所有任务所需的时间。
因此,如果输入如下:tasks = [0, 1, 1, 2] k = 2,则输出将为6,因为前两个任务是不同类型的,因此它们可以在没有任何间隔的情况下执行,现在在时间2,下一个任务是相同类型的任务,我们必须等待2个时间格,然后执行任务,最后是其他类型的任务,类型为2。因此,要执行此任务。 因此,它是[0、1、等待、等待、1、2]。从中,我们可以确定需要6个时间槽。
要解决这个问题,我们将按照以下步骤进行-
- tick := 0
- slot := 新的map
- for each t in tasks, do
- 如果t在slot中,则将tf设置为slot[t]。
- 如果tf不为null且tf-tick> 0,则
- tick := tick + tf-tick
- tick := tick + 1
- slot[t] := tick + k
- return tick
示例
让我们看下面的实现以获得更好的理解。
def solve(tasks, k):
tick = 0
slot = {}
for t in tasks:
tf = slot.get(t)
if tf is not None and tf - tick > 0:
tick += tf - tick
tick += 1
slot[t] = tick + k
return tick
tasks = [0, 1, 1, 2]
k = 2
print(solve(tasks, k))
输入
[0, 1, 1, 2]
输出
6