Given a collection of intervals, merge all overlapping intervals.
For example,
Given
return
Given
[1,3],[2,6],[8,10],[15,18]
,return
[1,6],[8,10],[15,18]
.Solution:
# Definition for an interval. # class Interval: # def __init__(self, s=0, e=0): # self.start = s # self.end = e class Solution: # @param intervals, a list of Interval # @return a list of Interval def merge(self, intervals): intervals = self.mergeSort(intervals) i =1 while i< len(intervals): if intervals[i-1].end >= intervals[i].start: intervals[i-1].end = max(intervals[i-1].end, intervals[i].end) intervals.pop(i) else: i +=1 return intervals def mergeSort(self, intervals): if len(intervals)<=1: return intervals left = self.mergeSort(intervals[0:len(intervals)//2]) right = self.mergeSort(intervals[len(intervals)//2:len(intervals)]) return self.mergeList(left, right) def mergeList(self, list1, list2): solution = [] pointer1 = 0 pointer2 = 0 while pointer1 < len(list1) and pointer2<len(list2): if list1[pointer1].start< list2[pointer2].start: solution.append(list1[pointer1]) pointer1 += 1 else: solution.append(list2[pointer2]) pointer2 += 1 while pointer1 < len(list1): solution.append(list1[pointer1]) pointer1 += 1 while pointer2 < len(list2): solution.append(list2[pointer2]) pointer2 += 1 return solution
No comments :
Post a Comment