Menu
CoddyTech

Insert Interval

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

你会得到两个按起点排序的数组,用来表示区间:区间 i 是 [starts[i], ends[i]],任意两个区间都不重叠,也不相接。插入新区间 [newStart, newEnd],将它与所有重叠或相接的区间合并,并返回所有按起点排序的 [start, end] 区间对。

如果一个区间的终点与另一个区间的起点相同,它们就相接,例如 [2, 4] 和 [4, 8],相接的区间会合并。[1, 2] 和 [3, 4] 没有共享任何点,所以它们保持分开。

函数

insertInterval(starts: integer-array, ends: integer-array, newStart: integer, newEnd: integer) → integer-2d-array
startsinteger-array
每个区间的起点,按升序排列
endsinteger-array
每个区间的末尾,与起点匹配
newStartinteger
要插入的区间的起始位置
newEndinteger
要插入的区间的末尾
返回值integer-2d-array
插入后的区间以 [start, end] 对表示,并按 start 排序

约束条件

  • 1 ≤ starts.length == ends.length ≤ 2000
  • 0 ≤ starts[i] ≤ ends[i] ≤ 105
  • ends[i] < starts[i+1]:区间按起始位置排序,且任意两个区间都不重叠也不相接。
  • 0 ≤ newStart ≤ newEnd ≤ 105

示例

输入
starts = [1, 5, 10, 15]ends = [3, 7, 12, 18]newStart = 6newEnd = 11
输出
[[1, 3], [5, 12], [15, 18]]
解释
[6, 11] 与 [5, 7] 和 [10, 12] 重叠,因此这三个区间合并为 [5, 12]。[1, 3] 在 6 之前结束,[15, 18] 在 12 之后开始,因此这两个区间都保持不变。
challenge icon

进阶

如果你连续插入多个区间,怎样存储它们,才能让每次插入的成本为 O(log n),再加上每个被合并的旧区间所需的一步?

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

测试 #1

测试 #2

测试 #3

参数

starts = [1, 5, 10, 15]
ends = [3, 7, 12, 18]
newStart = 6
newEnd = 11

预期输出

[[1, 3], [5, 12], [15, 18]]