问题描述
问题陈述如下:
给定一个 K 核系统,最多可以同时运行 K 个程序,以及一个程序列表 L,其中每个程序 = [start,end],按 start 升序排列。目前所有的程序都可以无冲突运行,也就是说在任何给定的时间点,最多有K个并发程序在运行。现在我们有了一个新的程序= [s0,e0],你需要判断这个程序是否可以在系统上无冲突地运行。
我想知道是否有 O(n)(或更快)的方法来回答这个问题。
我认为这个问题在问
在列表中添加一个新的区间后,如果它仍然最多有 K 个重叠区间。
我的想法是构建一个 TreeMap
,其键是所有端点(开始和结束),值是间隔数量的增量。例如,如果我们知道区间 [a,b],那么我们更新 treemap[a] += 1
和 treemap[b] -= 1
。在遍历完所有区间后,我们再次扫描 TreeMap
,计算增量总和,并记录最大总和。我们只需要返回 maxsum <= k
。
该方法的问题在于它的运行时间为 O(nlogn),因为插入 TreeMap
需要 O(logn) 时间。我看到有些人声称通过进行二分搜索我们可以实现 O(n) 时间复杂度,但我无法弄清楚。我理解我以前的方法的问题是我没有利用列表基于开始排序的事实,但我仍然无法了解如何在这些间隔上进行二分搜索。谁能给个提示?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)