File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ # 56. Merge Intervals
2+
3+ # First Try:
4+ # Time Complexity:O(N)
5+ # Brute Force with Two Pointers
6+ # 포인터를 사용해서 merge 해야하는 구간을 확인한다
7+ # 효율적이지 않아서 더 나은 방법이 있을 거 같다. 해당 문제를 봤을때 일단 기본적으로 정렬을 하고 pointer를 사용하는 방법을 떠올렸다.
8+ # merge 해야하는 구간은 2가지가 있다. 1. left의 end가 right의 start보다 크거나 같은 경우 2. left가 right의 구간을 전체를 다 포함하는경우 , 이경우 right를 지운다.
9+ class Solution :
10+ def merge (self , intervals : List [List [int ]]) -> List [List [int ]]:
11+ # Use two pointers
12+ intervals = sorted (intervals )
13+ left , right = 0 , 1
14+ n = len (intervals )
15+ while left < right and right < n :
16+ if intervals [left ][1 ] >= intervals [right ][0 ] and intervals [left ][1 ] >= intervals [right ][1 ]:
17+ del intervals [right ]
18+ n = len (intervals )
19+ # and intervals[left][1] < intervals[right][1]
20+ elif intervals [left ][1 ] >= intervals [right ][0 ]:
21+ intervals [left ] = [intervals [left ][0 ], intervals [right ][1 ]]
22+ del intervals [right ]
23+ n = len (intervals )
24+ # merge 할 경우가 아니면 다음 인덱스로 넘어가서 새로 비교한다
25+ else :
26+ left += 1
27+ right += 1
28+ return intervals
29+
30+ # Optimized Solution
31+ intervals .sort (key = lambda interval : interval [0 ])
32+ merged = []
33+
34+ for interval in intervals :
35+ if not merged or merged [- 1 ][1 ] < interval [0 ]:
36+ merged .append (interval )
37+ else :
38+ merged [- 1 ] = [merged [- 1 ][0 ], max (merged [- 1 ][1 ], interval [1 ])]
39+
40+ return merged
You can’t perform that action at this time.
0 commit comments