問題:
リングがあるかどうかを検索します。ポインタ2つのステップ早歩き、ポインタ一歩遅く、それはリング会う中に存在しています。低速ループの長さがsで、すばやく離れるポインタ2S、離れポインタSから配置されています。リングの開始位置は、それが戻って行くことができる開始位置Dの散歩をステップとして、D、どこ開始位置で少し遅い上にポインタの位置、である場合。
クラス解決{ パブリック: INT findDuplicate(ベクトル< INT >&NUMS){ int型遅い= 0 。 int型遠い= 0 ; INT、N = nums.size()。 // S、2S 2S = S + LのD + T = Sで // 歩行T、プラス完全な円を取得dは ながら(真){ 遅い =のNUMS [遅く]。 ファー = NUMS [NUMS [遠]。 もし(遅い==ここまで)休憩。 } int型のヘッド= 0 。 一方、(!ヘッド= 遅い){ ヘッド = NUMS [ヘッド]。 遅い =のNUMS [遅いです]。 } 戻りヘッド。 } }。