跳到主要内容

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].

分析

代码

# Insert Interval
# 时间复杂度O(n),空间复杂度O(1)
class Solution:
def insert(self, intervals: list[list[int]], newInterval: list[int]) -> list[list[int]]:
list_intervals = intervals[:]
self._insert(list_intervals, newInterval)
return list_intervals

def _insert(self, intervals: list[list[int]], newInterval: list[int]) -> None:
i = 0
while i < len(intervals):
cur = intervals[i]
if newInterval[1] < cur[0]: # insert before cur
intervals.insert(i, newInterval)
return
elif newInterval[0] > cur[1]:
i += 1
else: # overlap
newInterval[0] = min(newInterval[0], cur[0])
newInterval[1] = max(newInterval[1], cur[1])
intervals.pop(i)
intervals.append(newInterval)

相关题目