LeetCode 0056 合併區間

2021-10-21 21:50:01 字數 1453 閱讀 5739

以陣列intervals表示若干個區間的集合, 其中單個區間為 int

erva

ls[i

]=[s

tart

i,en

di

]intervals[i] = [start_i, end_i]

interv

als[

i]=[

star

ti​,

endi

​]. 請你合併所有重疊的區間, 並返回乙個不重疊的區間陣列, 該陣列需恰好覆蓋輸入中的所有區間

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

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

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

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

輸出:[[1,5]]

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

根據區間的左邊界排序

判斷結果集中的最後乙個元素的右邊界是不是小於當前值的左邊界

時間複雜度o(n

logn

)o(nlogn)

o(nlog

n), 排序需要o(n

logn

)o(nlogn)

o(nlog

n)的時間空間複雜度o(l

ogn)

o(logn)

o(logn

), 排序需要o(l

ogn)

o(logn)

o(logn

)的空間(遞迴)

class

solution

:def

merge

(self, intervals: list[list[

int]])

-> list[list[

int]]:

ifnot intervals:

# 邊界

return

res =

intervals.sort(key=

lambda x: x[0]

)# 先按區間左邊界值由小到大排序

for inter in intervals:

iflen

(res)==0

or res[-1

][1]

< inter[0]

:# 如果結果集最後乙個元素的右邊界比新加入區間的左邊界小,直接加入結果集

else

:# 否則,說明新加入的和結果集最後乙個區間有重合,更新區間右邊界即可

res[-1

][1]

=max

(res[-1

][1]

, inter[1]

)return res

leetcode刷題python之合併區間

emmm時間有些感人啊,看看能不能想辦法優化一些 思路為 先把陣列排序 元素是陣列也可排序,神奇 再判斷元素的左右邊界是否重疊,重疊則生成新的區間 太慢原因 使用了比較多的insert和pop,比一般的費時間 class solution def merge self,intervals list ...

leetcode56 區間合併

題目 給出乙個區間集合,求合併所有重疊後的區間。分析 區間處理先上套路,按左端點作第一維,右端點作第二維進行排序。依次考察每個區間,假設前面所有區間合併後是 left,right 若當前區間的左端點小於等於right,right max right,當前區間的右端點 否則說明有空格,將 left,r...

解題思路 leetcode第五十六題 合併區間

給出乙個區間的集合,請合併所有重疊的區間。示例 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 可被視為重疊區間。解題思路 本...