题目:给你一个 无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
例子
1 2 3
| 输入:intervals = , newInterval = 输出: 解释:这是因为新的区间 与 ,, 重叠。
|
算法思想:
1.将newInterval根据第一个数值插入到intervals中的指定位置。
2.对于不存在合并的区间,直接插入到新的区间。
3.对于存在合并情况,可能是区间单端重合,或者是区间两端都包含,则在数组的迭代过程中,不断更新区间两端, 使其分别取最小值和最大值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| from typing import List class Solution: def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]: """ 算法思想 """ if not intervals: return [newInterval] res = [] flag = False for i in range(len(intervals)): if newInterval[0] < intervals[i][0]: intervals.insert(i, newInterval) flag = True break if not flag: intervals.append(newInterval) for i in range(len(intervals) - 1): if intervals[i][1] < intervals[i + 1][0] or intervals[i][0] > intervals[i + 1][0]: res.append(intervals[i]) else: intervals[i + 1] = [min(intervals[i][0], intervals[i + 1][0]), max(intervals[i][1], intervals[i + 1][1])]
return res + [intervals[-1]]
s = Solution() res = s.insert([[3, 8], [9, 12], [14, 18], [21, 22]], [16, 21])
print(res)
|
[[3, 8], [9, 12], [14, 22]]