2017-07-05 4 views
0

はのは、私がこのような範囲のリストを持っていると言う範囲7へ、14 交差点アルゴリズム(またはマージ)は

16にリストC)15(すなわち、15〜15)

私は結果は次のようになり、これらの範囲のマージされたリストを取得したいのですが:

が合併結果リスト)0〜4、 6 9

16に、7に

私は、このためのアルゴリズムがあります確信しているが、見当がつかない(結果はリストAのマージ/交差/和集合、B、およびCがあることに注意してください) 。誰もこれを前にして来たのですか?

(擬似コード、またはVB、素晴らしいだろう)

視覚表現の追加:

enter image description here

+0

(14;+1)あなたは(単一のリスト内に、またはすべてのリストからの激怒をマージするか、その後、この順番で)。また、あなたのリストC) "15" - それはどういう意味ですか?単一の値でどのように範囲を指定できますか? –

+0

「15」は全範囲です.15で始まり15で終わります。私は15〜15のように書くことができたと思います(これを反映するように質問を更新します)。結果は、リストA、B、Cのマージ、または結合/交差です。 – swabygw

答えて

3

Value(使用によるペアの配列/リスト(Value, Flag = +1 for start or -1 for end of range)

ソートこれらの対を作ります

の場合は、補助キーとしてFlag 、マージされた範囲が始まるFlag

Counterが非ゼロになるCounterに追加して、ソートされた配列によってCounter = 0

ウォークを行います。

Counterがゼロになる、マージされた範囲は

P.S.を終了しますValueが同じ場合、ソート時にコンパレータ機能でFlagのアカウント - - あなたは「感動」の間隔をマージしたい場合は、たとえば、(14,-1)

+0

素晴らしいアイデア - 私はそれを試してみました。ここに私が得た結果は次のとおりです。0〜4,6〜7,9〜14,14〜16 – swabygw

+0

このケースに追加されたソリューション – MBo

+0

優良 - よく行われました。 – swabygw