Python程序:计算区间列表中总的唯一时长


假设我们有一个区间列表,每个列表表示一个区间 [开始, 结束](包含)。我们需要找到它覆盖的总唯一时长。

因此,如果输入类似于 intervals = [[2, 11],[13, 31],[41, 61]],则输出将为 50,因为总的唯一覆盖距离为 (11 - 2 + 1) = 10,然后 (31 - 13 + 1) = 19 和 (61 - 41 + 1) = 21,所以总计为 50。

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

  • 如果 intervals 列表为空,则
    • 返回 0
  • 对列表 intervals 进行排序
  • [start, end] := intervals[0]
  • ans := 0
  • 对于 intervals 中的每个开始和结束 (s, e),执行以下操作:
    • 如果 s > end,则
      • ans := ans + end - start + 1
      • start := s, end := e
    • 否则,
      • end := max(end, e)
  • ans := ans + end - start + 1
  • 返回 ans

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

示例

 在线演示

class Solution:
   def solve(self, intervals):
      if not intervals:
         return 0
         intervals.sort()
         start, end = intervals[0]
         ans = 0
         for s, e in intervals:
            if s > end:
               ans += end - start + 1
               start = s
               end = e
            else:
               end = max(end, e)
            ans += end - start + 1
         return ans
ob = Solution()
intervals = [[2, 11],[13, 31],[41, 61]]
print(ob.solve(intervals))

输入

[[2, 11],[13, 31],[41, 61]]

输出

50

更新于:2020年11月19日

949 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.