谷歌面试题:插入区间
描述:
给出一个无重叠的按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
在线测评地址
样例 1:
输入:
区间列表 = [(1,2), (5,9)]
新的区间 = (2, 5)
输出:
[(1,9)]
解释:
插入后区间有重叠,需要合并区间。
样例 2:
输入:
区间列表 = [(1,2), (5,9)]
新的区间 = (3, 4)
输出:
[(1,2), (3,4), (5,9)]
解释:
区间按起始端点有序。
思路
定位到区间集与待插入的区间开始重合的部分,然后开始求交集。 交集一直延伸到相交区间的最末端。
源代码
from lintcode import Interval
"""
Definition of an interval.
class Interval(object):
def __init__(self, start, end):
self.start = start
self.end = end
"""
class Solution:
"""
Insert a new interval into a sorted non-overlapping interval list.
@param intevals: Sorted non-overlapping interval list
@param newInterval: The new interval.
@return: A new sorted non-overlapping interval list with the new interval.
"""
def insert(self, intervals, newInterval):
results = []
insertPos = 0
for interval in intervals:
if interval.end < newInterval.start:
results.append(interval)
insertPos += 1
elif interval.start > newInterval.end:
results.append(interval)
else:
newInterval.start = min(interval.start, newInterval.start)
newInterval.end = max(interval.end, newInterval.end)
results.insert(insertPos, newInterval)
return results