假设我们有一个已排序且不相交的间隔列表和另一个表示间隔的列表剪切。我们必须删除与剪切间隔相交的间隔的所有部分,然后返回新列表。
因此,如果输入像间隔= [[2,11],[13,31],[41,61]] cut = [8,46],那么输出将是[[2,8],[46 ,61]]
为了解决这个问题,我们将遵循以下步骤-
cut_start,cut_end:=剪切
ans:=一个新列表
对于每个开始,以时间间隔结束,
如果start <cut_start,则
如果end> cut_end,则
将间隔[start,cut_start]插入ans
将间隔[cut_end,end]插入ans
如果cut_start和start的最大值<end和cut_end的最小值,则
除此以外,
返回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]]