难度: Hard
Submission
运行时间: 55 ms
内存: 17.5 MB
""" # Definition for an Interval. class Interval: def __init__(self, start: int = None, end: int = None): self.start = start self.end = end """ class Solution: def employeeFreeTime(self, schedule: '[[Interval]]') -> '[Interval]': temp = [] for interval in schedule: for inter in interval: temp.append(inter) temp.sort(key=lambda x: x.start) res = [] pre_end = temp[0].end for i in range(1, len(temp)): if temp[i].end <= pre_end: continue if temp[i].start > pre_end: res.append(Interval(pre_end, temp[i].start)) pre_end = temp[i].end return res
Explain
这个题解的思路首先是将所有员工的时间间隔收集到一个列表中,然后根据每个时间间隔的开始时间将这个列表排序。排序后,它遍历排序好的时间间隔列表,比较当前时间间隔的开始时间与前一个时间间隔的结束时间,以确定两者之间是否存在空闲时间。如果存在空闲时间(即当前时间间隔的开始时间大于前一个时间间隔的结束时间),则创建一个新的时间间隔来表示这段空闲时间,并将其添加到结果列表中。遍历结束后,返回包含所有空闲时间的列表。
时间复杂度: O(n log n)
空间复杂度: O(n)
“”“ # Definition for an Interval. class Interval: def __init__(self, start: int = None, end: int = None): self.start = start self.end = end ”“” class Solution: def employeeFreeTime(self, schedule: '[[Interval]]') -> '[Interval]': # 创建一个临时列表存储所有时间间隔 temp = [] for interval in schedule: for inter in interval: temp.append(inter) # 根据每个时间间隔的起始时间进行排序 temp.sort(key=lambda x: x.start) # 初始化结果列表和前一个时间间隔的结束时间 res = [] pre_end = temp[0].end # 遍历排序后的时间间隔列表 for i in range(1, len(temp)): # 如果当前时间间隔的结束时间小于等于前一个的结束时间,跳过 if temp[i].end <= pre_end: continue # 如果当前时间间隔的开始时间大于前一个的结束时间,说明有空闲,添加到结果列表 if temp[i].start > pre_end: res.append(Interval(pre_end, temp[i].start)) # 更新前一个时间间隔的结束时间 pre_end = temp[i].end # 返回包含所有空闲时间的列表 return res “”“