2017-07-14 96 views
0

什麼是node.js中將幾組給定時間段合併爲一個代表重疊時間段的集合的最好和最有效的方法?提供期間爲開始日期和結束日期。將重疊時間段的集合合併爲一個新的

4 sets of time intervals (days): 

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

New set representing overlaps: 

         (--)   (-----)     (---) 
+3

你到目前爲止試過的是什麼? –

+0

我會以數組的形式表示時間段,每個項目都有一個特定的日期:'[「20170714」,「20170715」]',然後每次相交兩個數組(參見[here](https://lodash.com) /文檔/#交點))。一旦你合併了所有的集合,你必須找到一種將數組轉換爲實際時間跨度的方法。 –

+1

@JuanStiza Lodash'intersect'並不是我們在這裏需要的 – Bergi

回答

2

合併所有的開始和結束時間戳到一個列表(存儲時間戳以及是否是開始或結束) - 無論是天真或使用more efficient algorithm如果你有好多套。

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

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

然後用一個簡單的遞增/遞減掃描隨着時間的推移:

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

,並收集那些間隔,其中計數是最大的。

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