如果有一组时间段,譬如说:2001/1/1~2001/1/5
2006/5/6~2007/1/1
2002/1/1~2003/1/5
2002/5/6~2007/1/1
。要求算出有时间重叠的纪录,譬如说最后那2条就有时间重叠。
当然,我可以最简单的这样算:第1条和2,3,4...比,然后第2条和3,4...除此之外,有没效率更高的算法呢?

解决方案 »

  1.   

    我之前做过一个类似的项目,但是这个判断时间重叠的代码不是我写的,当时我只写了在一组时间段中增加一个时间段的方法。如果我来设计这个,我会先把StartDate和EndDate分别升序排序,然后依次比较第k条的EndDate和第k+1条的StartDate。如果第k条的EndDate比第k+1条的StartDate大,那么说明这两个时间段没有重叠部分,反之,从第k+1条的StartDate到第k条的EndDate这一段是重叠的时间。期待高手解答更好的方法...
      

  2.   

    就是计算数据区间[Ai,Bi]重叠的问题
    这是编程之美中的一道题,先按照Ai的大小从小到大的排序,然后遍历Bi
    你可以查查"区间重合判断"