leetcode 56 合併區間

2021-10-21 14:20:58 字數 2189 閱讀 5667

題目鏈結

以陣列intervals表示若干個區間的集合,其中單個區間為intervals[i] = [starti, endi]。請你合併所有重疊的區間,並返回乙個不重疊的區間陣列,該陣列需恰好覆蓋輸入中的所有區間。

示例 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] 可被視為重疊區間。

python解法

比如這種情況,既要分析乙個區間的左邊界,又要分析乙個區間的有邊界,十分複雜

於是我們將每個區間,按區間的左邊界,從小到大排列。

這樣子,我們只需要比較,前乙個區間的右邊界和後乙個區間的左邊界,來判斷是否要合併,最後合併後的區間的右邊界,取兩個有邊界的最大值。

class

solution

:def

merge

(self, intervals: list[list[

int]])

-> list[list[

int]]:

intervals.sort(key=

lambda x: x[0]

) merged =

for interval in intervals:

# 如果列表為空,或者當前區間與上一區間不重合,直接新增

ifnot merged or merged[-1

][1]

< interval[0]

:else

:# 否則的話,我們就可以與上一區間進行合併

merged[-1

][1]

=max

(merged[-1

][1]

, interval[1]

)return merged

其中

intervals.sort(key=

lambda x: x[0]

)

是按區間的左邊界,從小到大進行排序。後面的x是可以任意替換成可以表示變數的字元

c++解法

class

solution

public

: vector

int>>

merge

(vector

int>>

& intervals)

else res.

push_back

(intervals[i]);

}return res;}}

;

由於合併區間的左區間一定是res.back()小的

但是右區間不一定 ,所以要max(res.back()[1],intervals[i][1])

另外排序還可以使用lambda表示式

sort

(intervals.

begin()

, intervals.

end(),

(const vector<

int>

& a,

const vector<

int>

& b)

);

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 可被視為重疊區間。題意還是好理...