|
|
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”——您仍在迭代时间段列表。 |
|
|
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 1 年前 |
|
|
Alisa Petrova · 在有向图中更改一对顶点以创建循环 1 年前 |
|
|
b39b332d · 使用C++标准库实现高效间隔存储 2 年前 |
|
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 2 年前 |
|
|
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 2 年前 |