计算包含范围的两个列表之间的交集/截距
本文关键字:之间 列表 两个 截距 范围 包含 计算 | 更新日期: 2023-09-27 18:24:40
我正试图找到反向交叉点,看看两支球队是否可以相互比赛,但很难找到准确的代码。
代表以下范围的类将包含两个属性,开始时间和结束时间,可以是日期时间或时间跨度。每个团队都可以有一个列表。时间跨度属性为分钟,因此下午2:21有效。
第一队不能在列出的两个时间之间比赛,所以他们只能在上午10:00到下午5:00之间比赛。不过,我们会存储排除情况。
第二队可以在上午8:00-下午12:00进行比赛。
这意味着一队和二队可以在10-12之间比赛。有没有一个好的方法可以在代码中计算出来?
团队1
List<Restriction>
Restriction
StartTime: 8:00 AM
EndTime: 10:00 AM
Restriction
StartTime: 5:00 PM
EndTime: 9:00 PM
团队2
List<Restriction>
Restriction
StartTime: 12:00 PM
EndTime: 9:00 PM
创建一个所有开始和结束时间的数组,包括+1或-1,具体取决于每个时间是开始时间还是结束时间。
对于你的一组时间,这会给你:
[(08:00, +1), (10:00, -1), (17:00, +1), (21:00, -1), (12:00, +1), (21:00, -1)]
排序:
[(08:00, +1), (10:00, -1), (12:00, +1), (17:00, +1), (21:00, -1), (21:00, -1)]
进行正负1的连续求和:
[(08:00, 1), (10:00, 0), (12:00, 1), (17:00, 2), (21:00, 1), (21:00, 0)]
运行总和是指当时正忙于启动的团队数量(0、1或2)。因此,现在标记为0的时间是两队都有空的开始时间(这里是10:00和21:00)。数组中的下一个时间是空闲周期的结束时间。这给出了两支球队都空闲的时间段,包括开始和结束时的时间段是(-无穷大到08:00)、(10:00到12:00)和(21:00到+无穷大)。