- Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathMergeOverlappingIntervals.py
More file actions
Latest commit
43 lines (39 loc) · 1.03 KB
/
Copy pathMergeOverlappingIntervals.py
File metadata and controls
43 lines (39 loc) · 1.03 KB
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
'''
Merge overlapping intervals
'''
defMergeIntervals(intervals):
'''
Args: a set of intervals like [1,3],[2,4],[5,7],[6,8]
Return [1,4],[5,8]
'''
i=0
# copy the list first
inters=intervals[:]
total=len(inters) -1
# sort the list by starting time
inters.sort(key=lambdax: x[0])
# function(x) { return x[0]; }
whilei<total:
ifinters[i][0] <inters[i+1][0] andinters[i][1]>inters[i+1][0]:
inters[i][1] =inters[i+1][1]
inters.remove(inters[i+1])
total=total-1
i=i+1
returninters
defMergeIntervalsBetter(intervals):
'''
using stack for hosting
'''
inters=intervals[:]
# sort the first time by ascending order
inters.sort(key=lambdax : x[0])
stack= []
forinterininters:
iflen(stack) ==0orinter[0] >stack[-1][1]:
stack.append(inter)
elifinter[0] <stack[-1][1] andinter[1] >stack[-1][1]:
stack[-1][1] =inter[1]
returnstack
a= [[2,4],[1,3],[5,7],[6,8]]
printMergeIntervals(a)
printMergeIntervalsBetter(a)