Multitasking
多任务处理
问题描述
给定一个任务列表和冷却时间。在同一时刻可以同时处理多件任务,但是不能同时处理同一类任务。每一类任务处理完成后需要一定的冷却时间后才能继续处理同类的任务。算法输出按顺序完成列表中给定任务所需的最短总时间。
测试样例
# Input:
[1, 1, 2, 1, 3, 3, 1]
# Output:
12
# 执行顺序为:
# 1 _ _ 1 2 _ 1 3 _ _ 3 1
# _ 表示冷却时间,所以给定任务需要 12 个单位时间完成。
内容首发于微信公众号IT信息教室,如果您想学习更多AI相关的技能,欢迎搜索关注或微信扫描下方二维码关注~~
参考代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ---------------------
# O(n) time|O(k) space
# n为待处理的任务总数,k为不重复的任务总数。
# ---------------------
def TasksTime(tasks, coolDown):
currentTime = 0
lastPosition = {}
# 使用字典来存储已经运行过的任务
# 字典的 key 是任务名称,value 是任务最后一次执行的时间
# 当接下来要执行的任务已经存在与字典中时,判断该任务是否已经超过冷却时间
for task in tasks:
if task in lastPosition:
# 如果没有超过冷却时间,就更新当前时间为该任务最近执行时间+冷却时间+1
# 即 将时间更新到冷却结束可以继续执行的时间
# 如果已经超过冷却时间,那么直接执行当前任务,并在字典中更新任务最后执行的时间
if currentTime - lastPosition[task] <= coolDown:
currentTime = lastPosition[task] + coolDown + 1
lastPosition[task] = currentTime
currentTime += 1
return currentTime
# Test Program
tasks = [1, 1, 2, 1, 3, 3, 1]
coolDown = 2
print(TasksTime(tasks, coolDown))
# 12