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]
.
首先要找到newInterval在已有数组中的位置。有三种可能:
class Solution:
# @param intervals, a list of Intervals
# @param newInterval, a Interval
# @return a list of Interval
def insert(self, intervals, newInterval):
len_intervals = len(intervals)
if 0 == len_intervals:
return [ newInterval ]
left_index = -1
right_index = -1
find_left = False
for m in range(0, len_intervals):
if not find_left and newInterval.start <= intervals[m].end:
find_left = True
left_index = m
if find_left:
if newInterval.end >= intervals[m].start:
right_index = m
if -1 == left_index: ###
intervals.append(newInterval)
return intervals
new_intervals = [ ]
for m in range(0, left_index):
new_intervals.append(intervals[m])
add_interval = None
start_index = -1
if -1 != right_index:
add_interval = Interval(min(newInterval.start, intervals[left_index].start), max(newInterval.end, intervals[right_index].end))
start_index = right_index + 1
else: ###
add_interval = newInterval
start_index = left_index
new_intervals.append(add_interval)
for m in range(start_index, len_intervals):
new_intervals.append(intervals[m])
return new_intervals