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`中
- 如果 `start < cut_start`,则:
- 否则:
- 如果 `max(cut_start, start) < min(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]]
广告