435. 無重疊區間

新名字的故事發表於2020-12-31

題目描述:給定一個區間的集合,找到需要移除區間的最小數量,使剩餘區間互不重疊。
注意:
可以認為區間的終點總是大於它的起點。
區間 [1,2] 和 [2,3] 的邊界相互“接觸”,但沒有相互重疊。
解題思路:按照區間的左邊界對集合進行排序,然後依次將每個區間壓入棧中,如果當前區間的左邊界小於棧頂區間的有邊界,即發生了重合,需要移除區間,這個時候我們貪心的移除掉右邊界更大的區間,因為這樣和後面區間重合的可能性更小,程式碼如下:

class Solution:
    def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
        n = len(intervals)
        if n <= 1: return 0
        intervals.sort(key=lambda x:x[0])
        s = [intervals[0]]
        res = 0
        for i in range(1, n):
            inter = intervals[i]
            if inter[0] < s[-1][1]:
                res += 1
                s[-1][1] = min(s[-1][1], inter[1])
            else:
                s.append(inter)
        return res

相關文章