我有多少,我需要合併,這樣的範圍,對象,所有的重疊範圍消失了重疊號,範圍:如何在功能合併從列表
case class Range(from:Int, to:Int)
val rangelist = List(Range(3, 40), Range(1, 45), Range(2, 50), etc)
這裏是範圍:
3 40
1 45
2 50
70 75
75 90
80 85
100 200
一旦完成後,我們會得到:
1 50
70 90
100 200
勢在必行算法:
- Pop()第一個range-obj並遍歷列表的其餘部分,並將其與其他每個範圍進行比較。
- 如果有重疊的項目, 將它們合併在一起(這會產生一個新的Range實例),並從源列表中刪除2個合併候選項。
- 在列表的末尾添加Range對象(可能已經通過合併多次更改)到最終結果列表中。
- 對剩下的項目中的下一項重複此操作。
- 一旦源列表爲空,我們就完成了。
要做到這一點勢在必行必須創造了很多臨時變量,索引循環等。
所以我不知道是否有一個功能更強大的方法呢?
初看起來,源代碼集合必須能夠像Stack一樣提供pop()PLUS ,使其能夠在遍歷它時通過索引刪除項目,但是那樣就不再那麼實用了。
假定'rs'按範圍初始元素排序。最好是讓'x包含y.from'。 – 2012-02-10 04:58:27
'merge'排序並傳遞給'collapse'。如果你不這樣做,你的運行時間應該是'O(n^2)'而不是'O(n log n)'。 – 2012-02-10 05:43:52
呃!我沒有注意到'merge'方法... – 2012-02-10 15:33:46