如何将时间数组(包括开始/结束和重叠)转换为“时间轴”?

时间:2017-02-19 23:18:55

标签: algorithm time

例如,假设我有一个如下所示的数组,每个时间都有一个开始和结束时间

格式:小时:分钟:秒

00:00:00 - 06:00:00
06:05:00 - 15:00:00
06:00:00 - 20:00:00
00:00:00 - 23:59:00

现在,我想将其转换为:

00:00:00 - 06:00:00
06:00:00 - 06:05:00
06:05:00 - 15:00:00
15:00:00 - 20:00:00
20:00:00 - 23:59:00

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

首先,您需要对所有时间间隔进行排序。

我不知道这些间隔是否可以换行,所以我猜如果它们换行,最好做的就是按最早的结束时间排序,否则按最早的开始时间排序。

排序后,假设你得到一个间隔数组A = [a0,a1,...,an]

那么你想要的是一个数组B,以便:

  

B [0] =(a0.begin,a0.end)

     

B [1] =(a0.end,a1.begin)

     

B [2] =(a1.begin,a1.end)   ...

所以当你注意到你只需要存储用于启动下一个B [i]的最后一个人时,算法会变得简单

function next( 2-tuple T ) -> 2-tuple {
    if(T.second == 0) {
        return 2-tuple(T.first, 1)
    }
    return 2-tiple(T.first + 1, 0)
}     

function Solution( array A ) -> array {
    let n = number of elements in A
    let index = 0
    let last = (0,0)
    while( last != (n,2) ){
        B[index] = (last, next(last))
    }
    return B
}
希望它有所帮助!