LeetCode 57 插入區間

2021-10-02 18:24:44 字數 2027 閱讀 4653

題目描述

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

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

示例 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]]:

new_start, new_end = newinterval

idx, n =0,

len(intervals)

output =

while idx < n and new_start > intervals[idx][0

]:) idx +=1if

not output or output[-1

][1]

< new_start:

else

: output[-1

][1]

=max

(output[-1

][1]

, new_end)

while idx < n:

interval = intervals[idx]

start, end = interval

idx +=

1if output[-1

][1]

< start:

else

: output[-1

][1]

=max

(output[-1

][1]

, end)

return output

此題涉及貪心演算法,下面做出簡單介紹:

貪心演算法一般用來解決需要「找到要做某事的最小數量」「找到在某些情況下適合的最大物品數量」的問題,且提供的是無序的輸入。

貪心演算法的思想是每一步都選擇最佳解決方案,最終獲得全域性最佳的解決方案。

標準解決方案具有 o(n

log⁡n)

\mathcal(n \log n)

o(nlogn)

o (n

logn

)\mathcal o(nlogn)

o(nlog

n)的時間複雜度且由以下兩部分組成:

思考如何排序輸入資料(o(n

log⁡n)

\mathcal(n \log n)

o(nlogn)

的時間複雜度)。

思考如何解析排序後的資料(o(n

)\mathcal(n)

o(n)

的時間複雜度)

如果輸入資料本身有序,則我們不需要進行排序,那麼該貪心演算法具有 o(n

)\mathcal(n)

o(n)

的時間複雜度。

參考:

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