面试题:如果新增的区间会和区间列表中的K个区间重叠

问题描述

问题陈述如下:

给定一个 K 核系统,最多可以同时运行 K 个程序,以及一个程序列表 L,其中每个程序 = [start,end],按 start 升序排列。目前所有的程序都可以无冲突运行,也就是说在任何给定的时间点,最多有K个并发程序在运行。现在我们有了一个新的程序= [s0,e0],你需要判断这个程序是否可以在系统上无冲突地运行。

我想知道是否有 O(n)(或更快)的方法来回答这个问题。

我认为这个问题在问

在列表中添加一个新的区间后,如果它仍然最多有 K 个重叠区间。

我的想法是构建一个 TreeMap,其键是所有端点(开始和结束),值是间隔数量的增量。例如,如果我们知道区间 [a,b],那么我们更新 treemap[a] += 1treemap[b] -= 1。在遍历完所有区间后,我们再次扫描 TreeMap,计算增量总和,并记录最大总和。我们只需要返回 maxsum <= k

方法的问题在于它的运行时间为 O(nlogn),因为插入 TreeMap 需要 O(logn) 时间。我看到有些人声称通过进行二分搜索我们可以实现 O(n) 时间复杂度,但我无法弄清楚。我理解我以前的方法的问题是我没有利用列表基于开始排序的事实,但我仍然无法了解如何在这些间隔上进行二分搜索。谁能给个提示

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)