说[a,b]表示从a到b的实线上的间隔,a <b,包括端点(即[a,b] =所有x的集合,使得a <= x <= b)。另外,如果[a,b]和[c,d]共享任何x,使得x在[a,b]和[c,d]两者中,则它们是“重叠的”。
给定间隔列表([x1,y1],[x2,y2],…),找到所有与[x,y]重叠的间隔的最有效方法是什么?
显然,我可以尝试每种方法并在O(n)中得到它。但是我想知道是否可以以某种巧妙的方式对间隔列表进行排序,我可以通过二进制搜索在O(log N)中找到/ one /重叠项,然后从列表中的该位置“环顾四周”以查找所有重叠的间隔。但是,如何对间隔进行排序,以使这种策略可行?
请注意,列表项本身中的元素之间可能存在重叠,这就是很难做到这一点的原因。
我已经尝试过按其左端,右端,中间的间隔对它们进行排序,但是似乎都没有导致详尽的搜索。
救命?
如果b> x和a <y,则[a,b]与[x,y]重叠。按时间间隔的前几个元素进行排序可以使间隔时间与日志时间中的第一个条件匹配。按时间间隔的最后一个元素进行排序可以使间隔时间与日志时间中的第二个条件匹配。取结果集的交点。