|
|
1
2
与原始解决方案一样,您需要将每个间隔与其他间隔进行比较, 除了 间隔具有相同的id,因此我将这样编码: 支持类,只是为了简化实际算法:
查找最大重叠的方法:
|
|
|
2
1
您可以使用 TimePeriodLibrary。净额 :
|
|
|
3
1
使用扩展方法:
和一些辅助函数
可以将跨度与匹配的
生成所有对
然后计算每对
既然提到了效率,我应该说直接实现其中一些操作而不是使用LINQ效率更高,但您使用的是元组和内存结构,所以我认为这不会有多大区别。 我使用24000个跨度和1249个唯一ID的列表运行了一些性能测试。LINQ代码耗时约16秒。通过内联一些LINQ并用元组替换匿名对象,时间降到了3.1秒左右。通过添加一个快捷方式,跳过任何累计天数小于当前最大重叠天数的ID,并进行一些优化,我将其缩短到1秒以内。
应用的优化:
注意:我尝试了一个更智能的重叠天数计算,但当每个ID的跨度数很小时,开销要比直接计算花费更长的时间。 |
|
4
0
解决方案已经很少 但是
如果要提高效率,则不必将每个对象/值与其他任何值或对象进行比较。您可以使用
我建议你看这个 video 罗伯特·塞奇威克(RobertSedgwick)的著作,这本书也可以在线阅读。 |
|
|
5
-2
这里的基本问题是如何确定一组唯一的时间段。给每个人自己一个独特的ID。 在编写最终答案时,请在输出中包含其他详细信息,以便用户能够了解最终答案是由哪些(原始)ID和原始时间段产生的。 记住-问题仍然与原始帖子中的相同( https://codereview.stackexchange.com/questions/186014/finding-the-longest-overlapping-period/186031?noredirect=1#comment354707_186031 )你仍然有相同的信息要处理。不要过于关注原始列表中提供的“ID”——您仍在迭代时间段列表。 |
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |