多任务处理

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值