巡回ソート
01 / 共通の仕組み
値が既知の範囲 [0, N] または [1, N] に収まるとき、添字そのものがポインタになる —— 各要素は自分の帰る場所をすでに知っている。 その場で順に家へ送り返してソートするか、見た添字を符号反転で記録するか。 どちらの方法でも、線形時間・定数追加領域で「欠損 / 重複 / 失われた」一連の問題が解ける。
上から一つのサブパターンを選んでください。それぞれ単独でリンクできます — 問題に一番近いものから始めましょう。
↑ 選ぶ— / どれをいつ使うか
古典的巡回ソート
入力が変更可能で、各要素を物理的に正しい添字へ収めたいときに使う —— 欠損値や重複値をすべて列挙したい場合など。
家へスワップ · LC 268 · LC 448
添字マーキング
各添字が出現したか否かだけが重要で、マーク 1 周 + 読み取り 1 周で済ませたいときに使う ——
arr[|x|−1] の符号を反転して「見た」を記録する。符号反転 · LC 442 · LC 41