非C#固有の答え:
- 配列を最小値で並べ替える
- 配列を反復処理する
- 現在の配列の最大要素が次の配列の最小要素よりも小さい場合、重複がないため、何もしません
- 現在の配列から要素を削除する場合は、次の配列の最小値に等しい要素から切り取ります。
- 次の配列から要素を削除する場合は、現在の配列の最大値に等しい要素まで切り取ります。
これらは配列であり、連続する要素は 1 ずつインクリメントされるため、単純な減算を行うことでカット インデックスを決定できます。配列をステップ実行する必要はありません。
これにより、配列の順序が削除されますが、例から、それは重要ではないようです。
重要であれば、各配列の元のインデックスを保持することは難しくありません。
1 つの配列が (同じ側で) 他の複数の配列とオーバーラップする可能性がある場合、複雑さが増す可能性がありますが、対処するのはそれほど難しくありません。
例:
Input: {{0,1,2,3,4}, {6,7,8,9}, {5,6,7}, {10}}
Sorted: {{0,1,2,3,4}, {5,6,7}, {6,7,8,9}, {10}}
Arrays 1 and 2:
4 < 5, no overlap
Arrays 2 and 3:
7 >= 6, overlap
Either cut off 6 and 7 from array 2, or 6 and 7 from array 3
(depending on what output you want)
Arrays 3 and 4:
9 < 10, no overlap
Output:
{{0,1,2,3,4}, {5}, {6,7,8,9}, {10}}
or
{{0,1,2,3,4}, {5,6,7}, {8,9}, {10}}