在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
- 如果t与last不同且cnt与0不同,则
-
返回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]]