gpt4 book ai didi

c# - 计算包含范围的两个列表之间的交集/截距

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:25:50 27 4
gpt4 key购买 nike

我正在尝试找到反向交叉点,看看两支球队是否可以互相比赛,但很难找到执行此操作的精确代码。

表示以下范围的类将包含两个属性,开始时间和结束时间,可以是日期时间或时间跨度。每个团队都可以列出这些。 timespan 属性精确到分钟,因此下午 2:21 有效。

第 1 队无法在列出的这两个时间段内进行比赛,因此他们只能在上午 10:00 至下午 5:00 之间进行比赛。不过,我们会存储排除项。

第 2 队可以在美国东部时间 8:00 -12:00 PM 比赛。

意味着第 1 队和第 2 队可以在 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)。阵列中的下一个时间是免费期的结束。这给出了两个团队空闲的时间段,其中包括开始和结束的时间段是(-infinity 到 08:00)、(10:00 到 12:00)和(21:00 到 +infinity)。

关于c# - 计算包含范围的两个列表之间的交集/截距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26070140/

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