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.