merge-intervalsV1.py (837B)
1 # idea: 2 3 # sort 4 # go from left to right, merging when applicable in new array 5 6 # TC: O(nlogn) 7 8 9 class Solution: 10 def merge(self, intervals: List[List[int]]) -> List[List[int]]: 11 12 intervals.sort() 13 merged = [] 14 15 for i in range(0, len(intervals)): 16 17 current = intervals[i] 18 if len(intervals) - 1 != i and overlapping(intervals[i], intervals[i + 1]): 19 current = merge(intervals[i], intervals[i + 1]) 20 21 if merged and overlapping(merged[-1], current): 22 merged[-1] = merge(merged[-1], current) 23 else: 24 merged.append(current) 25 26 return merged 27 28 29 # int1[0] <= int2[0] 30 def overlapping(int1, int2): 31 if int1[1] >= int2[0]: 32 return True 33 34 35 def merge(int1, int2): 36 return [min(int1[0], int2[0]), max(int1[1], int2[1])]