題目
給出一個區(qū)間的集合,請合并所有重疊的區(qū)間。
示例 1:
輸入: [[1,3],[2,6],[8,10],[15,18]]
輸出: [[1,6],[8,10],[15,18]]
解釋: 區(qū)間 [1,3] 和 [2,6] 重疊, 將它們合并為 [1,6].
示例 2:
輸入: [[1,4],[4,5]]
輸出: [[1,5]]
解釋: 區(qū)間 [1,4] 和 [4,5] 可被視為重疊區(qū)間。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/merge-intervals
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
解題思路
- 先將區(qū)間按照左半邊排序。這里使用了lambda函數(shù)。
- 依次拿出每一個區(qū)間和前一個對比,如果能合并就合并;否則加入一個新的區(qū)間。
代碼
class Solution(object):
def merge(self, intervals):
"""
:type intervals: List[List[int]]
:rtype: List[List[int]]
"""
if not intervals or len(intervals) == 1:
return intervals
intervals.sort(key = lambda x:x[0])
res = [intervals[0]]
for i in range(1, len(intervals)):
temp = intervals[i]
if temp[0] <= res[-1][1]:
res[-1][1] = max(res[-1][1], temp[1])
else:
res.append(temp)
return res