LeetCode 56 合併區間

2021-10-25 18:02:29 字數 1367 閱讀 1435

題目描述

給出乙個區間的集合,請合併所有重疊的區間。

示例 1:

輸入: intervals = [[1,3],[2,6],[8,10],[15,18]]

輸出: [[1,6],[8,10],[15,18]]

解釋: 區間 [1,3] 和 [2,6] 重疊, 將它們合併為 [1,6].

示例 2:

輸入: intervals = [[1,4],[4,5]]

輸出: [[1,5]]

解釋: 區間 [1,4] 和 [4,5] 可被視為重疊區間。

intervals[ i ] [ 0 ] <= intervals[ i ] [ 1 ]

題解:(排序) o(nlogn)o(nlog⁡n)

1.首先將所有區間按照 start 排序,start 相同的按照 end 排序。

2.從頭開始遍歷所有區間,並求他們的並集。定義 cur 表示當前一些區間的並集。

3.若發現當前遍歷到的區間 start 嚴格大於 cur 的 end,則當前並集需要加入到答案陣列中,且更新區間並集 cur 為當前區間。

4.若發現當前遍歷到的區間 end 嚴格大於 cur 的 end,則更新 cur 的 end 為當前區間的 end。

時間複雜度

排序的時間複雜度為 o(nlogn),排序後只需要線性掃瞄,故總時間複雜度為 o(nlogn)。

c++版:

class solution );

}else

}return ans;}}

;

python版

class

solution

:def

merge

(self, intervals: list[list[

int]])

-> list[list[

int]]:

intervals.sort(key =

lambda x: x[0]

) ans =

for i in intervals:

ifnot ans or ans[-1

][1]

< i[0]

:else

: ans[-1

][1]

=max

(ans[-1

][1]

, i[1]

)return ans

Leetcode 56 合併區間

對所有區間按起點位置進行排序 遍歷到k點後的 l,r 已知的包含k點的最大區間 遍歷到k 1點,若該起點屬於 l,r 那麼可能擴充套件這個區間的終點,r max r,k 1點的end definition for an interval.struct interval interval int s,...

LeetCode 56 合併區間

給出乙個區間的集合,請合併所有重疊的區間。示例 1 輸入 1,3 2,6 8,10 15,18 輸出 1,6 8,10 15,18 解釋 區間 1,3 和 2,6 重疊,將它們合併為 1,6 示例 2 輸入 1,4 4,5 輸出 1,5 解釋 區間 1,4 和 4,5 可被視為重疊區間。解題思路 1...

LeetCode 56 合併區間

給出乙個區間的集合,請合併所有重疊的區間。示例 1 輸入 1,3 2,6 8,10 15,18 輸出 1,6 8,10 15,18 解釋 區間 1,3 和 2,6 重疊,將它們合併為 1,6 示例 2 輸入 1,4 4,5 輸出 1,5 解釋 區間 1,4 和 4,5 可被視為重疊區間。題意還是好理...