【发布时间】:2012-02-01 20:13:56
【问题描述】:
参考已经对另一个问题给出的答案:
https://stackoverflow.com/a/1609686/1183608
我正在处理这个答案,但是我对计算可接受的时间数组的意义感到困惑。我想知道一天中的什么时间(时间表)可用于特定的时隙长度,但上述答案中这样做的功能似乎不能满足这一点,除非我错过了什么。
【问题讨论】:
参考已经对另一个问题给出的答案:
https://stackoverflow.com/a/1609686/1183608
我正在处理这个答案,但是我对计算可接受的时间数组的意义感到困惑。我想知道一天中的什么时间(时间表)可用于特定的时隙长度,但上述答案中这样做的功能似乎不能满足这一点,除非我错过了什么。
【问题讨论】:
grioja,您链接到的答案确实为您提供了可用于您所需时隙长度的时间。忙/可用时间用位表示,例如:
1100001110
(这将是 30 分钟可用,然后是 60 分钟忙碌,然后是 45 可用,然后是 15 忙碌。)然后你会得到一个二进制数,它代表你想要找到的可用时间段的长度,比如:
111
(这意味着您想找到一个有 45 分钟可用时间的空档。)然后您尝试将这 2 个数字相互移动:
1100001110
0000000111
1100001110
0000001110
1100001110
0000011100
...等等,对于每个可能的相对移位长度。他在该答案中显示的 AND 操作确定“所需时隙长度”数字中的 1 是否与“可用时间”数字中的所有 1 匹配。如果是,您已经找到了一个可以接受的时间。
顺便说一句,你可以用其他方式做同样的事情。例如,您可以用字符串中的字符表示忙碌/可用时间,并使用正则表达式查找所需长度的可用槽。
请注意,如果可用/忙碌时隙列表很长,这种通用方法(基本上只是“线性搜索”)将无法扩展。在这种情况下,还有其他方法会更快。
【讨论】: