0

私はかなり長い間この問題を試してきましたが、良い解決策が見つかりません:

次のような整数の範囲があるとします

 100 - 1000
 200 - 300
 500 - 600
 550 - 575
 800 - 1200
 1100 - 2300

だから私はこれらの混合範囲をそれぞれの別個の範囲に取得したい

 100 - 199
 200 - 300
 301 - 499
 500 - 549
 550 - 575
 575 - 600
 800 - 1099
 1100 - 1200
 1201 - 2300

これにはいくつかの標準アルゴリズムがありますか?

ありがとう

4

1 に答える 1

2

すべての数値を単一の配列に押し込み、並べ替えて重複排除します。C++ では、それらすべてを a に挿入するとstd::set<int>、目的の効果が得られます。Python では、次のように記述できますsorted(set(x for (a, b) in ranges for x in (a, b)))

結果のコレクションでは、隣接するペアは重複しない範囲を表します。

この手法は、範囲を記述するための [a, b) 規則 (つまり、左側は包括的、右側は排他的) に依存していることに注意することが重要です。

于 2012-08-10T12:40:10.440 に答える