程序查找在哪个时间间隔内用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]]