给定一组间隔,找到具有最大交叉点数量(而不是特定交叉点的长度)的间隔。因此,如果输入(1,6)(2,3)(4,11),则应返回(1,6)。有人建议使用间隔树在O(nlogn)中完成此操作,但是在阅读其维基页面后,我不了解如何构造和使用间隔树。我相信可以通过执行某种排序和扫描算法来完成。如果“间隔树”是唯一的选择,请教我如何构造/使用一个树。谢谢。
注意:David Eisenstat的算法比该算法具有更好的性能。
一个简单的平面扫描算法将在中执行此操作O(nlogn + m*n),其中m是任何单个间隔的最大相交数。
O(nlogn + m*n)
m
对时间间隔端点进行排序。跟踪活动段。到达起点时,增加所有活动间隔的相交计数,并将新间隔的相交计数设置为活动间隔的数量(不包括其自身)。到达终点时,从活动间隔中删除该间隔。