例如,假设我有一个如下所示的数组,每个时间都有一个开始和结束时间
格式:小时:分钟:秒
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
任何帮助都会很棒。
答案 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
}
希望它有所帮助!