【python-leetcode56-區間合並】合並區間


問題描述:

給出一個區間的集合,請合並所有重疊的區間。

示例 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

結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM