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
广告