以陣列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 可被視為重疊區間。解題思路 本...