2017-07-14 4 views
0

node.jsで、いくつかのセットの期間を重複する期間を表す1つのセットにマージするといいでしょうか?期間は開始日と終了日として提供されます。複数の重複する期間を新しいものにマージする

4 sets of time intervals (days): 

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

New set representing overlaps: 

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

これまでに試したことはありますか? –

+0

私は時間枠を配列として表し、それぞれの項目には特定の日付を指定します: '[" 20170714 "、" 20170715 "]'次に一度に2つの配列を交差させます([here](https://lodash.com/docs /#交差点))。すべてのセットをマージしたら、配列を実際の時間範囲に変換する方法を見つける必要があります。 –

+1

@JuanStiza Lodash 'intersect'はここに必要なものではありません – Bergi

答えて

2

すべてが(タイムスタンプを格納し、それが開始または終了のかどうか)を開始し、1つのリストにタイムスタンプを終了マージ - 単純またはmore efficient algorithmのいずれかを使用して、あなたがセットの多くを持っている場合。

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

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

はその後時間をかけて、単純なインクリメント/デクリメントスキャンを使用:

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

そしてカウントが最大であるそれらの間隔を収集します。

     ^^^^^   ^^^^^^^     ^^^^^ 
関連する問題