用 Python 编写程序,查找一个最小可能间隔以插入间隔列表
pythonserver side programmingprogramming更新于 2026/2/2 6:36:17
假设我们有一个 2D 数字列表,称为间隔,其中每行代表 [开始,结束](含)间隔。对于间隔 [a, b](a < b),其大小为 (b - a)。我们必须将一个间隔添加到给定列表中,以便在合并所有间隔后,我们只剩下一个范围。我们必须找到添加间隔的最小可能大小。
因此,如果输入为 intervals = [[15, 20],[30, 50]],则输出将为 10,因为我们可以添加间隔 [20, 30],这是最小的可能间隔。
为了解决这个问题,我们将遵循以下步骤 −
- events := a new list
- 对于间隔中的每个开始和结束时间 s、e,执行
- 在事件末尾插入 (s, 1)
- 在事件末尾插入 (e, -1)
- 对事件列表进行排序
- curr_status := 0, last := null
- interval := a pair [0, 0]
- 对于事件中的每个对 (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
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

