小 L 的课表里面有很多课,这些课可以视为 个时间段,每个时间段给出的形式为 。其中 为两个整数,分别表示时间段的起始和结束时刻,保证结束时刻总在开始时刻之后。 小 L 发现这些课的时间可能会冲突,请你帮小 L 找到交集时间最长的两个时间段的交集时间。写个代码
时间: 2024-10-07 13:02:10 浏览: 6
小L想要找到课表中所有课程时间最长的交集部分。这个问题可以用数据结构如集合(Set)和线性扫描来解决。首先,我们可以将所有的课按照起始时刻排序,然后依次遍历每个课程,检查它是否与已经计算出的交集有重叠。如果有重叠,我们就更新当前的最长交集。这里是一个Python的简单解决方案:
```python
def find_longest_intersection(lessons):
lessons.sort(key=lambda x: x[0]) # 按照起始时间升序排列
max_interval = 0 # 初始化最长交集
current_interval = None # 当前正在处理的区间
for i in range(len(lessons)):
if not current_interval or lessons[i][0] >= current_interval[1]: # 如果当前区间结束,或者新区间开始位置大于等于旧区间的结束位置
# 记录下旧的最长交集
if current_interval and (max_interval == 0 or lessons[i][1] - lessons[i][0] > max_interval):
max_interval = lessons[i][1] - lessons[i][0]
# 开始新的区间
current_interval = lessons[i]
else: # 新区间与旧区间有交集
max_interval = max(max_interval, lessons[i][1] - current_interval[0])
return max_interval if current_interval and max_interval else 0
# 示例:
lessons = [[1, 3], [2, 4], [3, 5], [4, 6]]
print(find_longest_intersection(lessons)) # 输出:2,即课程[2, 4]和[3, 5]的交集
```