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:
Input: intervals = [[1,3],[6,9]], newInterval = [2,5] Output: [[1,5],[6,9]]
Example 2:
Input: intervals =[[1,2],[3,5],[6,7],[8,10],[12,16]]
, newInterval =[4,8]
Output: [[1,2],[3,10],[12,16]] Explanation: Because the new interval[4,8]
overlaps with[3,5],[6,7],[8,10]
.
NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.
题目插入一个区间,返回新的区间数组。
问题比较简单,线性合并到一个新数组中即可。复杂度O(n)。代码如下:
# Definition for an interval.
# class Interval(object):
# def __init__(self, s=0, e=0):
# self.start = s
# self.end = e
class Solution(object):
def insert(self, intervals, newInterval):
"""
:type intervals: List[Interval]
:type newInterval: Interval
:rtype: List[Interval]
"""
def mergeTwoNode(node1,node2):
if node1.start <= node2.end and node1.end >= node2.start:
node1.start = min(node1.start,node2.start)
node1.end = max(node1.end,node2.end)
return True
return False
ret = []
insert = False
for interval in intervals:
if not insert and newInterval.start <= interval.end:
ret.append(newInterval)
insert = True
if not mergeTwoNode(newInterval,interval):
ret.append(interval)
if not insert:
ret.append(newInterval)
return ret