Python程式:查詢插入區間列表中一個可能的最小區間
假設我們有一個名為intervals的二維數字列表,其中每一行表示[開始,結束](包含)區間。對於區間[a,b](a < b),其大小為(b - a)。我們必須向給定的列表中新增一個區間,以便在合併所有區間後,我們恰好剩下一個範圍。我們必須找到新增區間的最小可能大小。
因此,如果輸入類似於intervals = [[15, 20],[30, 50]],則輸出將為10,因為我們可以新增區間[20, 30],這是最小可能的區間。
為了解決這個問題,我們將遵循以下步驟:
- events := 新列表
- 對於intervals中的每個開始和結束時間s、e,執行以下操作:
- 在events的末尾插入(s, 1)
- 在events的末尾插入(e, -1)
- 對列表events進行排序
- curr_status := 0,last := null
- interval := 一對[0, 0]
- 對於events中的每個對(time, status),執行以下操作:
- 如果curr_status與0相同,並且last存在,並且time > last,則
- 如果interval[0]與0相同,則
- interval[0] := last
- interval[1] := time
- 如果interval[0]與0相同,則
- last := time
- curr_status := curr_status + status
- 如果curr_status與0相同,並且last存在,並且time > last,則
- 返回interval[1] - interval[0]
讓我們看看以下實現以獲得更好的理解:
示例
class Solution: def solve(self, intervals): events = [] for s, e in intervals: events.append((s, 1)) events.append((e, -1)) events.sort() curr_status = 0 last = None interval = [0, 0] for time, status in events: if curr_status == 0 and last and time > last: if interval[0] == 0: interval[0] = last interval[1] = time last = time curr_status += status return interval[1] - interval[0] ob = Solution() intervals = [[15, 20],[30, 50]] print(ob.solve(intervals))
輸入
[[15, 20],[30, 50]]
輸出
10
廣告