Faaez Razeen

Merge Intervals

  • 3 min read
  • Interval
  • LC-Medium

3 years ago

Solution

TimeSpaceExplanation
O(n log n)O(1)
def merge(self, intervals: List[List[int]]) -> List[List[int]]: intervals.sort(key=lambda interval: interval[0]) ans = [intervals[0]] for i in range(1, len(intervals)): if intervals[i][0] <= ans[-1][1]: ans[-1] = [min(intervals[i][0], ans[-1][0]), max(intervals[i][1], ans[-1][1])] else: ans.append(intervals[i]) return ans

My First Solution -Kinda Bad?

def merge(self, intervals: List[List[int]]) -> List[List[int]]: if len(intervals) == 1: return intervals intervals = sorted(intervals, key=lambda x: x[0]) ans = [] cur_interval = intervals[0] for i in range(1, len(intervals)): # If overlapping, merge intervals and set as cur interval if intervals[i][0] <= cur_interval[1]: cur_interval = [min(intervals[i][0], cur_interval[0]), max(intervals[i][1], cur_interval[1])] if i == len(intervals) - 1: ans.append(cur_interval) # If not overlapping, add current interval to answer and set cur interval to next interval else: ans.append(cur_interval) # if i + 1 < len(intervals): cur_interval = intervals[i] if i == len(intervals) - 1: # if last element and not overlapping, append interval to answer. ans.append(intervals[i]) i += 1 return ans