给定一组任务,每个任务都是独立线程执行,任务包含起始时间和停止时间,求完成这些任务线程池最少需要几个线程。
例如:
输入[0,3),[1,2),[3,5) (结束时刻不计算在内)
输出2
思路1:建立时间线,寻找同时运行的最大任务数
Python解法:
l = [[0,3], [1,2], [3,5]]
start = []
end = []
for i in l:
start.append(i[0])
end.append(i[1])
start.sort()
end.sort()
max_num = 0
count = 0
for t in range(start[0], end[-1]+1):
if start and t == start[0]:
count += 1
start.pop(0)
if t == end[0]:
count -= 1
end.pop(0)
max_num = max(count, max_num)
print(max_num)
思路2:按开始时间排序后,维护一有序终止队列。比思路1效率更高,end_list的插入、排序还可以优化。
l = [[0,3], [3,5], [1,2]]
l = sorted(l, key=lambda x :(x[0], x[1]))
cur_time = l[0][0]
end_list = [ l[0][1] ]
max_num = 0
for task in l[1:]:
cur_time = task[0]
while end_list and end_list[0] <= cur_time:
end_list.pop(0)
end_list.append(task[1])
end_list.sort()
max_num = max(max_num, len(end_list))
print(max_num)