LeetCode 57 插入區間

2021-10-10 05:55:00 字數 1684 閱讀 2053

給出乙個無重疊的 ,按照區間起始端點排序的區間列表。

在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊(如果有必要的話,可以合併區間)。

示例 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 日更改。請重置為預設**定義以獲取新的方法簽名。

前言

對於區間

如果思路與演算法

在給定的區間集合

這樣做的正確性在於,給定的區間集合中任意兩個區間都是沒有交集的,因此所有需要合併的區間,就是所有與區間 s 重疊的區間。

並且,在給定的區間集合已經按照左端點排序的前提下,所有與區間 s 重疊的區間在陣列 intervals 中下標範圍是連續的,因此我們可以對所有的區間進行一次遍歷,就可以找到這個連續的下標範圍。

當我們遍歷到區間

那麼我們應當在什麼時候將區間 s 加入答案呢?由於我們需要保證答案也是按照左端點排序的,因此當我們遇到第乙個 滿足

c++

class solution );

placed = true;

}ans.push_back(interval);

}else if (interval[1] < left)

else

}if (!placed) );

}return ans;}};

python

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:

# 在插入區間的右側且無交集

if not placed:

placed = true

elif ri < left:

# 在插入區間的左側且無交集

else:

# 與插入區間有交集,計算它們的並集

left = min(left, li)

right = max(right, ri)

if not placed:

return ans

1、

LeetCode 57 插入區間

幾個注意點 1.原集合為空 2.插入在最開始的位置 3.插入在末尾位置 4.插入在中間 可以通過新增標誌,沒有新增就每次都去判斷重疊情況進行新增 vectorresult if intervals.size 0 bool isadd false for int i 0 i intervals.siz...

leetcode57 插入區間

給出乙個無重疊的 按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 示例 1 輸入 intervals 1,3 6,9 newinterval 2,5 輸出 1,5 6,9 示例 2 輸入 intervals 1,2 3,...

leetcode 57 插入區間

給出乙個無重疊的 按照區間起始端點排序的區間列表。在列表中插入乙個新的區間,你需要確保列表中的區間仍然有序且不重疊 如果有必要的話,可以合併區間 示例 1 輸入 intervals 1,3 6,9 newinterval 2,5 輸出 1,5 6,9 示例 2 輸入 intervals 1,2 3,...