将重叠时间段的集合合并为新的时间段

时间:2017-07-14 18:20:30

标签: javascript node.js date momentjs

在node.js中,将几组给定时间段合并为一个表示重叠时间段的集合,这是一种非常有效的方法吗?期间作为开始日和结束日提供。

4 sets of time intervals (days):

 (-------------------------)         (---------)                (---)
                       (------------------------)           (-------)
                 (--------)            (-------)                (----)
       (---------------------)     (---------)     (---)      (-----------)

New set representing overlaps:

                       (--)            (-----)                  (---)

1 个答案:

答案 0 :(得分:2)

将所有开始和结束时间戳合并到一个列表中(存储时间戳,无论是开始还是结束) - 天真地或使用more efficient algorithm如果你有很多集合。

  (-------------------------)         (---------)                (---)
                        (------------------------)           (-------)
                  (--------)            (-------)                (----)
        (---------------------)     (---------)     (---)      (-----------)

  (     (         (     (  )) )     ( ( (     ))))  (   )    ( (((   )))   )

然后使用简单的递增/递减扫描:

0 -                                              ----   ------             ---
1 (------                     -------           -)  (---)    (--      -----)
2       (----------         --)     (--         )              (-    -)
3                 (------  -)         (--     --)                (   )
4                       (--)            (-----)                  (---)

并收集计数最大的区间。

                        ^^^^^           ^^^^^^^                  ^^^^^