給出乙個無重疊的 ,按照區間起始端點排序的區間列表。
在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊(如果有必要的話,可以合併區間)。
示例 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] 重疊。
注意:輸入型別已在 2019 年 4 月 15 日更改。請重置為預設**定義以獲取新的方法簽名。
分析:分為需要合併區間和不需要合併區間.
不需要合併區間時newinterval整個在intervals的外側, 利用左小於左,右大於右來判斷是否無交集, 即newinterval[0] 大於interval每個區間的最小值的同時newinterval[1]小於interval每個區間的最大值.
需要合併區間時則確定區間最大最小值後插入這個新的區間, 不再新增原有區間和插入區間.
class solution:
def insert(self, intervals: list[list[int]], newinterval: list[int]) -> list[list[int]]:
left, right = newinterval
placed = false
ans = list()
for li, ri in intervals:
if li > right: #這裡保證了newinterval與整個interval的區間都沒有交集, 有交集的情況在else這裡, 所以這裡需要設定無交集的區間插入.
# 在插入區間的右側且無交集, 根據right確定插入位置
if not placed:
placed = true #注意這裡避免重複插入區間
elif ri < left:
# 在插入區間的左側且無交集
else: # 這裡只有有交集的區間, 前面已經去掉了無交集的區間
# 與插入區間有交集,計算它們的並集
left = min(left, li)
right = max(right, ri)
if not placed: #保證newinterval只新增一次
return ans
插入區間 python
題目描述 給出乙個無重疊的,按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 示例1 輸入 intervals 1,3 6,9 newinterval 2,5 輸出 1,5 6,9 示例2 輸入 intervals 1,2...
排序 中等 57 插入區間
題目 給你乙個 無重疊的 按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 示例 1 輸入 intervals 1,3 6,9 newinterval 2,5 輸出 1,5 6,9 示例 2 輸入 intervals 1,...
56 57 合併區間 插入區間
給出乙個區間的集合,請合併所有重疊的區間。直接對區間起點進行排序,然後遍歷,判斷當前遍歷區間的起點是否在前一區間內,在的話,更新前一區間的終點為兩者終點最大值,不在的話直接將當前區間插入。class solution sort intervals.begin intervals.end const ...