[leetcode sort]57. Insert Interval
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).
You may assume that the intervals were initially sorted according to their start times.
Example 1:
Given intervals [1,3],[6,9], insert and merge [2,5] in as [1,5],[6,9].
Example 2:
Given [1,2],[3,5],[6,7],[8,10],[12,16], insert and merge [4,9] in as [1,2],[3,10],[12,16].
This is because the new interval [4,9] overlaps with [3,5],[6,7],[8,10].
把一个区间插入一个已排序的无重叠的区间, 如果重叠的话,合并之
方法一:有点类似于快排的方法
1 class Solution(object): 2 def insert(self, intervals, newInterval): 3 s,e = newInterval.start,newInterval.end 4 small = [ i for i in intervals if i.end<s ] 5 large = [ i for i in intervals if i.start>e ] 6 if small + large != intervals: 7 s = min(s,intervals[len(small)].start) 8 e = max(e,intervals[~len(large)].end) 9 return small+[Interval(s,e)]+large
方法二:和上面方法一样,不过这个代码太帅了!!!只需要遍历一次
1 class Solution(object): 2 def insert(self, intervals, newInterval): 3 s,e = newInterval.start,newInterval.end 4 parts = mid,left,right=[],[],[] 5 for v in intervals: 6 parts[(v.end<s)-(v.start>e)].append(v) 7 if mid: 8 s = min(s,mid[0].start) 9 e = max(e,mid[-1].end) 10 return left+[Interval(s,e)]+right

浙公网安备 33010602011771号