在Python中寻找任务被处理的时间间隔内有多少个任务

在Python中寻找任务被处理的时间间隔内有多少个任务

假设我们有一个时间间隔列表,每个时间间隔类似于[start,end),我们还有一个称为types的字符串列表。现在对于给定的i,intervals [i]显示了从[start,end)某人处理的作业类型[i]的时间。同一类型的两个间隔永远不会重叠或接触。因此,我们必须找到一个排序合并列表,其中每个项目有[start,end,num_types],表示从start到end,正在处理的任务数量为num_types。

因此,如果输入为intervals = [[0,3],[5,7],[0,7]] types = [“问题解决”,”新闻”,”游戏玩法”],则输出将是[[0,3,2],[3,5,1],[5,7,2]],因为我们有这些少量工作类型正在进行:在[0,3)之间,“问题解决”和“游戏玩法”,在[3,5)之间“游戏玩法”,在[5,7)之间“新闻”和“游戏玩法”。

为了解决这个问题,我们将遵循以下步骤:

  • ev:一个新列表

  • 对于间隔起始结束对(intervals [s,e])中的每个,执行以下操作:

    • 在ev的末尾插入(s,1)

    • 在ev的末尾插入(e,-1)

  • 排序列表ev

  • cnt:0,last:-1

  • ans:一个新列表

  • 对于事件中的时间和增量参数(ev中的t,inc),执行以下操作:

    • 如果t与last不同且cnt与0不同,则
      • cnt:cnt + inc
    • last:t

  • 返回ans

看以下实现以获得更好的理解 –

更多Python相关文章,请阅读:Python 教程

示例

class Solution:
 def solve(self, intervals, jobs):
 ev = []
 for s, e in intervals:
     ev.append((s, 1))
     ev.append((e, -1))
 ev.sort()
 cnt = 0
 last = -1
 ans = []
 for t, inc in ev:
     if t != last and cnt != 0:
         ans.append([last, t, cnt])
     cnt += inc
     last = t
 return ans
ob = Solution()
intervals = [
 [0,3],
 [5,7],
 [0,7]
]
types = ["问题解决","新闻","游戏玩法"]
print(ob.solve(intervals, types))

输入

[[0,3],[5,7],[0,7]],["问题解决","新闻","游戏玩法"]

输出

[[0, 3, 2],[3, 5, 1],[5, 7, 2]]

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程