我有一個內存中的List<Event>
,它可以是長度從1到50000+的任何值(不理想,但情況是)。每個Event
包含一個openTime
屬性和一個closedTime
屬性,它們被存儲爲Long
。最有效的方法來重疊範圍?
鑑於事件可能重疊,我需要確定事件處於活動狀態的時間量。當你用圖形來看它並不是很困難。
我實現了幾種解決方案,但我發現它很難找到不有顯著時間資源影響的解決方案!我目前的解決方案包括
- 迭代集合;對於每個值,我通過迭代和找到範圍內的任何值來確定集合中的任何其他值是否重疊。
- 遞增循環遍歷範圍中的每毫秒(大約60000 - 即1小時),並查看當時是否有任何收集元素處於活動狀態。
這些都不是性能友好的,所以任何有效的方式來實現這一點的建議將非常讚賞?
人們爲什麼害羞投票給我! – hasan83
這比我的方法更好,並導致我失去了一些好主意。我並不完全相信這是最有效率的,所以我只是暫時將其標記爲正確的答案。 – tarka
我不認爲這樣的問題可以通過更少的O(nlgn)和定義來解決。你可以稍微等一下,但是你會發現比nlgn更好。而且很實用。 – hasan83