我有一个内存中的List<Event>
,它可以是长度从1到50000+的任何值(不理想,但情况是)。每个Event
包含一个openTime
属性和一个closedTime
属性,它们被存储为Long
。最有效的方法来重叠范围?
鉴于事件可能重叠,我需要确定事件处于活动状态的时间量。当你用图形来看它并不是很困难。
我实现了几种解决方案,但我发现它很难找到不有显著时间资源影响的解决方案!我目前的解决方案包括
- 迭代集合;对于每个值,我通过迭代和找到范围内的任何值来确定集合中的任何其他值是否重叠。
- 递增循环遍历范围中的每毫秒(大约60000 - 即1小时),并查看当时是否有任何收集元素处于活动状态。
这些都不是性能友好的,所以任何有效的方式来实现这一点的建议将非常赞赏?
人们为什么害羞投票给我! – hasan83
这比我的方法更好,并导致我失去了一些好主意。我并不完全相信这是最有效率的,所以我只是暂时将其标记为正确的答案。 – tarka
我不认为这样的问题可以通过更少的O(nlgn)和定义来解决。你可以稍微等一下,但是你会发现比nlgn更好。而且很实用。 – hasan83