gpt4 book ai didi

algorithm - 确定两个给定时间范围是否重叠

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:13:52 24 4
gpt4 key购买 nike

给定以下示例:

      0  2  4  6  8  10 12 14 16 18 20 22 24
Hour: |--|--|--|--|--|--|--|--|--|--|--|--|

A: ------| |---------
B: |-----------|
C: ---| |------------
D: |--------|
E: |-----|

A(from 18:00 to 04:00)
B(from 02:00 to 10:00)
C(from 16:00 to 02:00)
D(from 00:00 to 06:00)
E(from 20:00 to 00:00)

确定两个给定时间范围是否重叠的最有效方法是什么?

请注意,如果时间范围介于 02:00 和 10:00 (B) 之间,它将在 02:00 和 04:00 之间的时间与 18:00 和 04:00 (A) 的时间范围重叠。

我正在尝试使用 TimeRange.getSecondOfDay() 进行计算,如果时间是 00:00:00 则返回 0,如果时间是 23:59:59 则返回 86400。每天从0开始。

最佳答案

在一般情况下,对于给定的 A,B 的值存在三个区域,因此无论哪种方式,您都必须检查所有区域。相对简单的方法是“移动”一个范围,使其从 00:00 开始,如下所示:

bool Overlap(Range a, Range b){
time b_from = (b.from-a.from+86400)%86400;
time b_to = (b.to-a.from+86400)%86400;
time a_to = (a.to-a.from+86400)%86400;

return !(b_from<=b_to && b_from>=a_to);
}

关于algorithm - 确定两个给定时间范围是否重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33676175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com