最有效的方式来巩固重叠"开始和结束时间

时间:2015-07-29 17:29:29

标签: algorithm

假设我们有一个数据结构:

class Segment{
    float startTime;
    float endTime;
}

我们有一堆细分,其中一些细分具有重叠的持续时间。合并这些细分以获得不重叠持续时间的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

一个选项是创建一个包含所有开始和结束时间的数组,然后按时间顺序对其进行排序。然后,您可以从左到右遍历数组,在每个点跟踪打开的间隔数。无论何时看到开始时间,都会增加间隔数,每当看到结束时间时,都会减少间隔数。当您这样做时,无论何时从零开启间隔变为1,记录新间隔的开始,每当您从一个开放间隔变为零时,记录关闭时间。

总的来说,这在时间O(sort + n)中运行。如果你使用像堆排序或快速排序这样的东西,那就是时间O(n log n)。如果你使用基数排序 - 假设它适用 - 这将是时间O(n log U),其中U是最大值。

希望这有帮助!