如何找出一天中所有缺失的时段

时间:2017-01-24 07:31:52

标签: algorithm data-structures time

是否有任何算法可以找出一天中所有丢失的时段。

鉴于选择了四个时隙。

e.g。预期投入:08:00-1259,13:45-17:15,14:15-19:00,20:00-23:33

我想根据选择的以及以下条件找出所有缺少的时段。

  1. 所选时段可以重叠(例如13:45-17:15,14:15-19:59)
  2. 忽略比上一个时段的结束时间晚的丢失时段(例如,在23:33之后不显示所有丢失的时段)
  3. 预期产出:13:00-13:44,19:01-19:59

    即使有一些不符合上述标准的类似算法,也请随意尝试。

    更新

    我认为我的审判效率不高。

    我尝试省略所有“:”并从0到2359循环并检查每分钟是否在四个选定时隙的范围内。一旦我发现了一个超出任何选定时间段的分钟。该分钟将被记录为缺失时段的开始时间。然后,当找到在这四个时隙内的下一分钟时。我将用1减去那一分钟并将其记录为缺少时间段的结束时间。

    e.g。当1300,1300的计数器被视为缺失时段的开始时间,当计数器位于1345时。我将减去一分钟并将结束时间标记为1344.

2 个答案:

答案 0 :(得分:2)

  1. 按开始时间对输入进行排序(您的示例已将它们排序)。
  2. 对于除最后一个之外的每个输入时间范围:
    • 如果结束时间(加上一分钟)早于下一个开始时间,请记录一个间隙。

答案 1 :(得分:2)

效率取决于您的数据的可用形式。如果数据存储在数组中,我可以想到以下方式:按开始时间排序,偶数索引为开始,奇数索引为停止时间。

start          End

[0]0100      [1]0500

[2]0200      [3]0300  //case of slot totally covered by any previous slot

[4]0400      [5]0900  //case of slot partially covered by any previous slot 

[6]1200      [7]1500  //case of slot never covered

*** Notation [x]YYYY : x is array index and YYYY is time 
1. MAX = element[0]
2. Loop for all index i
3. ----If element[i] > MAX 
4. --------If i is odd, MAX=element[i]
5. --------Else MAX to element[i] is missing slot