问题描述:
给出一个无重叠的 ,按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
示例 :
输入: intervals = [[1,3],[6,9]], newInterval = [2,5]
输出: [[1,5],[6,9]]
问题分析:
(1)根据intervals
列表里面的每个小区间的左端
,把newInterval
新区间插入到intervals
里。
(2)重新收集intervals
列表里面的每个小区间,并考虑重叠合并问题。
Python3实现:
# @Time :2018/11/17
# @Author :Yinxing
# Definition for an interval.
class Interval:
def __init__(self, s=0, e=0):
self.start = s
self.end = e
class Solution:
def insert(self, intervals, newInterval):
if len(intervals) == 0:
return [newInterval]
i = 0 # 找到合适的位置,插入新的区间,不考虑重叠问题
while i < len(intervals):
if intervals[i].start > newInterval.start:
break
i += 1
intervals.insert(i, newInterval) # 插入新区间
res = [intervals[0]] # 定义结果列表,并把第一个元素放进去
for i, e in enumerate(intervals, start=1): # 依次添加新元素,并考虑重叠问题
if e.start <= res[-1].end:
res[-1].end = max(res[-1].end, e.end)
else:
res.append(e)
return res
if __name__ == '__main__':
solu = Solution()
intervals = [Interval(1, 3), Interval(6, 9)]
newInterval = Interval(2, 5)
print(solu.insert(intervals, newInterval))
声明: 总结学习,有问题或不妥之处,可以批评指正哦。