-
Notifications
You must be signed in to change notification settings - Fork 0
/
employee_free_time.py
54 lines (36 loc) · 1.21 KB
/
employee_free_time.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
"""
https://leetcode.com/problems/employee-free-time/solution/
tags : Facebook, phone
"""
class Solution:
def employeeFreeTime(self, schedule):
# O(N Log(N)) where N is number of intervals =
if not schedule: return []
intervals = sorted([i for s in schedule for i in s], key=lambda x: x.start)
ans = []
start = intervals[0]
for x in intervals[1:]:
if start.end < x.start:
ans.append(Interval(start.end, x.start))
start = x
elif x.end > start.end:
start = x
return ans
def empfreetime(self, schedule):
import heapq
heap = []
for emp in schedule:
for i in emp:
heap.append((i.start, i.end))
heapq.heapify(heap)
start, end = heapq.heappop(heap)
free = end
res = []
while heap:
start, end = heapq.heappop(heap)
if start > free:
res.append(Interval(free, start))
free = end
else:
free = max(free, end)
return res