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 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告