使ってみよう + セグメントの開始を示し、 −終わりを示します。各セグメントについて、各エンドポイントに1つずつ、2つのペアを作成します。
Segment1: (-2, +), (3, -)
Segment2: (1, +), (5, -)
Segment3: (-3, +), (1, -)
並べ替え 2 N最初の座標でペアにします(等しい場合は-の前に+を付けます)。あなたは時間内にこれを行うことができますO (NログN) 適切な並べ替えアルゴリズムを使用して、または時間内に O (N+ K)キーインデックス付きカウントを使用します。この例では、次のようになります。
(-3, +)
(-2, +)
(1, +)
(1, -)
(3, -)
(5, -)
次に、エンドポイントを順番に処理します。アクティブなセグメントの数のカウントを維持します。最初は0です。+、カウントを1ずつ増やします。 −、カウントを1つ減らします。各エンドポイントを処理した後、新しいカウントがこれまでの最大カウントよりも高いかどうかを確認します。正しい場合は、ソリューションを更新してください。
(-3, +) -> count=1, max_count=0, sol=-3
(-2, +) -> count=2, max_count=1, sol=-2
(1, +) -> count=3, max_count=2, sol=1
(1, -) -> count=2, max_count=3, sol=1
(3, -) -> count=1, max_count=3, sol=1
(5, -) -> count=0, max_count=3, sol=1
アルゴリズムのこの第2フェーズは、時間に比例してかかります N。アルゴリズム全体に時間がかかるO (NログN) ジェネリックソート、または O (N+ K) キーインデックス付きのカウント。