Menu
CoddyTech

Merge Intervals

中等区间排序python iconjava iconcpp iconc iconjs icon+10

你会得到一组区间,每个区间都是从起点到终点的一段整数范围。将每组重叠的区间合并为一个覆盖整组区间的区间,并按起点排序后返回合并结果。仅相接的区间也算重叠,例如 [1, 4] 和 [4, 5]。

这些区间由两个长度相同的数组表示:区间 i 是 [starts[i], ends[i]]。你需要返回一个二维数组,也就是由 [start, end] 对组成的列表。

函数

mergeIntervals(starts: integer-array, ends: integer-array) → integer-2d-array
startsinteger-array
每个区间的起点
endsinteger-array
每个区间的末尾与其起点位于相同索引处
返回值integer-2d-array
合并后的区间,以 [start, end] 对表示,并按起点排序

约束条件

  • 1 ≤ starts.length == ends.length ≤ 104
  • 0 ≤ starts[i] ≤ ends[i] ≤ 104
  • 这些区间以任意顺序到达。
  • 仅在端点处相接的区间也算重叠。

示例

输入
starts = [5, 1, 12, 3]ends = [7, 4, 14, 6]
输出
[[1, 7], [12, 14]]
解释
按开始位置排序后,[1, 4] 与 [3, 6] 重叠,而后者又与 [5, 7] 重叠,因此这三个区间合并为 [1, 7]。[12, 14] 的起点在 7 之后,因此保持独立。
challenge icon

进阶

这些区间已经按起点排序并合并,你需要再添加一个新区间。你能在 O(n) 时间内返回合并后的列表,而不再排序吗?

重置代码
def mergeIntervals(starts, ends):
    # 在这里编写代码

测试 #1

测试 #2

参数

starts = [5, 1, 12, 3]
ends = [7, 4, 14, 6]

预期输出

[[1, 7], [12, 14]]