用 Python 编写的程序,从间隔列表中查找最长间隔的长度

pythonserver side programmingprogramming

假设我们有一个间隔列表,其中每个间隔的形式为 [start, end]。我们必须找到通过合并任意数量的重叠间隔可以得到的最长间隔。

因此,如果输入为 [[1, 6],[4, 9],[5, 6],[11, 14],[16, 20]],则输出将为 9,因为合并后,我们有长度为 9 的间隔 [1, 9]。

为了解决这个问题,我们将遵循以下步骤 −

  • 对列表间隔进行排序
  • union := 间隔列表中的第一个间隔
  • best := union[end] - union[start] + 1
  • 对于除第一个间隔之外的每个开始时间 s 和结束时间 e,执行
    • 如果 s <= union[end],则
      • union[end] := union[end] 和 e 的最大值
    • 否则,
      • union := 一个新的区间 [s, e]
    • best := best 和 union[end] - union[start] + 1 的最大值
  • 返回 best

让我们看看下面的实现以便更好地理解 −

示例

class Solution:
   def solve(self, intervals):
      intervals.sort()
      union = intervals[0]
      best = union[1] - union[0] + 1
      for s, e in intervals[1:]:
         if s <= union[1]:
            union[1] = max(union[1], e)
         else:
            union = [s, e]
            best = max(best, union[1] - union[0] + 1)
      return best
ob = Solution()
intervals = [[1, 6],[4, 9],[5, 6],[11, 14],[16, 20]]
print(ob.solve(intervals))

输入

[[1, 6],[4, 9],[5, 6],[11, 14],[16, 20]]

输出

9

相关文章


有用资源