Python程序:查找完成任务所需的最小时间(相同类型任务之间有k个时间间隔)
假设我们有一个名为tasks的整数列表,其中每个项目代表不同的任务类型,我们还有一个非负整数k。每个任务需要一个单位时间来完成,并且必须按正确的顺序完成任务,但我们必须在执行两个相同类型任务之间留出k个单位时间。在任何时候,我们可以执行任务或等待。我们必须找到完成所有任务所需的时间量。
因此,如果输入类似于tasks = [0, 1, 1, 2] k = 2,则输出将为6,因为前两个任务是不同类型的,因此可以无需任何间隔地执行它们,现在在时间2,下一个任务是相同类型的任务,我们必须等待2个时间槽,然后执行任务,最后是其他类型的任务,类型2。所以执行此任务。所以它就像[0, 1, 等待, 等待, 1, 2]。由此我们可以确定,我们需要6个时间槽。
为了解决这个问题,我们将遵循以下步骤:
- tick := 0
- slot := 新建一个映射
- 对于tasks中的每个t,执行:
- 如果t在slot中,则tf := slot[t]
- 如果tf不为空并且tf - tick > 0,则
- tick := tick + tf - tick
- tick := tick + 1
- slot[t] := tick + k
- 返回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
广告