程序查找在哪个时间间隔内用Python处理多少个任务

假设我们有一个间隔列表,其中每个间隔都像[start,end),并且还有一个称为类型的字符串列表。现在,对于给定的i,interval [i]显示某人从[开始,结束)开始从事工作类型[i]的时间。相同类型的两个间隔永远不会重叠或接触。因此,我们必须找到一个排序的合并列表,其中每个项目都有[start,end,num_types],指示从头到尾,num_types个正在处理的任务数。

因此,如果输入是间隔= [[0,3],[5,7],[0,7]]类型= [“解决问题”,“新闻”,“游戏”],则输出将为为[[0,3,2],[3,5,1],[5,7,2]],因为我们正在完成以下几种工作:[0,3)在“问题解决”和“ [3,5)之间的“游戏”,以及[5,7)之间的“新闻”和“游戏”。

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

  • ev:=一个新列表

  • 对于间隔中的每个间隔开始端对(s,e),执行

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

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

  • 排序列表ev

  • cnt:= 0,最后:= -1

  • ans:=一个新列表

  • 对于ev中事件的每个时间和增量参数(t,inc),执行

    • cnt:= cnt + inc

    • 如果t与last不相同且cnt与0不相同,则

    • 最后:= t

  • 返回ans

让我们看下面的实现以更好地理解-

示例

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 = ["problem solving", "news", "game play"]
print(ob.solve(intervals, types))

输入值

[[0, 3],[5, 7],[0, 7]], ["problem solving", "news", "game play"]

输出结果

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