📅  最后修改于: 2023-12-03 15:37:15.612000             🧑  作者: Mango
这道题目是关于多个时间区间的交集问题,可以用数组排序和双指针方法来解决。
给定一个任务列表,每个任务都有固定的开始时间和结束时间,求出任务时间区间的交集。
第一行是数字T,表示测试用例的数量。每个测试用例的第一行是一个数字N,表示任务的数量。接下来有N行,每行有两个整数S和E,表示任务的开始时间和结束时间。
对于每个测试用例,在一行中打印出任务时间区间的交集。如果没有交集,则打印"NO TIME"。
输入:
1
4
1 10
2 9
3 8
4 7
输出:
4 7
我们可以将任务按照开始时间的先后顺序进行排序,然后用两个指针start和end来记录当前最小和最大的开始时间,并且当end指针没有越界时不断进行如下操作:
最后判断一下开始和结束时间是否有交集,有交集则输出结果,否则输出"NO TIME"。
下面是使用Python实现该算法的代码片段,实现过程中涉及到排序和双指针操作:
def find_intersections(tasks):
tasks.sort(key=lambda x: x[0])
start, end = tasks[0][0], tasks[0][1]
for i in range(1, len(tasks)):
if tasks[i][0] <= end:
end = min(end, tasks[i][1])
else:
start, end = tasks[i][0], tasks[i][1]
if start <= end:
return f"{start} {end}"
else:
return "NO TIME"
返回的结果需要进行按照markdown格式进行标明,代码片段如下:
```python
def find_intersections(tasks):
tasks.sort(key=lambda x: x[0])
start, end = tasks[0][0], tasks[0][1]
for i in range(1, len(tasks)):
if tasks[i][0] <= end:
end = min(end, tasks[i][1])
else:
start, end = tasks[i][0], tasks[i][1]
if start <= end:
return f"{start} {end}"
else:
return "NO TIME"