Python程式:查詢與切割區間不相交的區間


假設我們有一個已排序且不相交的區間列表和另一個表示區間的列表`cut`。我們需要刪除與`cut`區間相交的所有區間部分,並返回新的列表。

例如,如果輸入是`intervals = [[2, 11],[13, 31],[41, 61]]`,`cut = [8, 46]`,則輸出為`[[2, 8], [46, 61]]`。

為了解決這個問題,我們將遵循以下步驟:

  • `cut_start`, `cut_end` := `cut`
  • `ans` := 新列表
  • 對於`intervals`中的每個`start`, `end`:
    • 如果 `max(cut_start, start) < min(end, cut_end)`,則:
      • 如果 `start < cut_start`,則:
        • 將區間`[start, cut_start]`插入到`ans`中
      • 如果 `end > cut_end`,則:
        • 將區間`[cut_end, end]`插入到`ans`中
    • 否則:
  • 返回`ans`

讓我們來看下面的實現來更好地理解:

示例

線上演示

class Solution:
   def solve(self, intervals, cut):
   cut_start, cut_end = cut
   ans = []
   for start, end in intervals:
      if max(cut_start, start) < min(end, cut_end):
         if start < cut_start:
            ans.append([start, cut_start])
            if end > cut_end:
               ans.append([cut_end, end])
         else:
            ans.append([start, end])
      return ans
ob = Solution()
intervals = [[2, 11],[13, 31],[41, 61]] cut = [8, 46]
print(ob.solve(intervals, cut))

輸入

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

輸出

[[2, 8], [46, 61]]

更新於:2020年11月19日

179 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.