57-插入区间

给出一个无重叠的 ,按照区间起始端点排序的区间列表。

在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。


示例

示例 1:

输入: intervals = [[1,3],[6,9]], newInterval = [2,5]
输出: [[1,5],[6,9]]

示例 2:

输入: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
输出: [[1,2],[3,10],[12,16]]
解释: 这是因为新的区间 [4,8] 与 [3,5],[6,7],[8,10] 重叠。

解法

核心思想:先添加到原数组中,按左端点排序后,判断后一个的起始点是否包含在前一个区间中。

class Solution:
def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
intervals.append(newInterval)
n = len(intervals)
if n < 2:
return intervals
intervals.sort()
for i in range(n-1):
# 后一个区间中包含在前一个区间内的元素
if intervals[i + 1][0] in range(intervals[i][0], intervals[i][1] + 1):
# 新的区间范围
l1, l2 = intervals[i][0], max(
intervals[i][1], intervals[i+1][1])
intervals[i+1] = [l1, l2]
intervals[i] = "*"
res = [i for i in intervals if i != "*" ]
return res

相关信息

LeetCode:Discussion | Solution


-------------本文结束感谢您的阅读-------------