問題描述:
給出一個區間的集合,請合並所有重疊的區間。
示例 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,3],[2,6],[8,10],[15,18]]為例。
先對二維數組按一維數組的第0位進行排序,假設結果是res=[]。
當res為空時先將[1,3]加入到res中,再遍歷到[2,6],此時有兩種情況,如果當前數組的第0位大於res中最后一個數組的第1位,說明當前數組和res末尾的數組不會重疊,此時之間將當前數組加到res末尾。如果當前數組第0位小於或等於res末尾數組第1位,再判斷當前數組第1位和res末尾數組第一位誰大,將其更新res末尾數組的第一位。依次類推。
代碼:
class Solution: def merge(self, intervals: List[List[int]]) -> List[List[int]]: res = [] intervals.sort() for i in intervals: if not res or res[-1][1]<i[0]: res.append(i) else: res[-1][1] = max(res[-1][1],i[1]) return res
結果: