クラスソリューション{ 公共 のint findRepeatNumber(INT [] NUMS){ // 反復 のために(INT I = 0; I <nums.length; I ++ ){ // 配列要素は、添字に等しくない場合(ソート操作が行われました) 一方、(NUMS [I]!= I){ // この要素に対応する彼のインデックスを持つ要素の位置が等しく表される場合、要素を繰り返すことが見出されている IF(NUMS [I] == NUMS [NUMS [I])戻り; [I] NUMSを // 彼素子のスイッチング対応する添字位置によって表されるこの要素と のint TMP = NUMS [I]を、 NUMSは、[I]は = [TMP] NUMSと、 NUMS [TMP] = TMPと、 } } 戻り 0 。 } }
デジタルアレイは、0〜N-1の範囲です。配列要素が繰り返されていない場合は、その配列順序の後に排水し、添字番号i私は次に表示されます。いくつかの場所は数字を持っていないかもしれないが、いくつかの場所では、より多くの桁数を存在してもよいです。
デジタル添字を走査したときアレイを通して、iが(Mで示される)第一図Iに等しくないと比較されます。
yesの場合は、次の番号をスキャン;、その後、聞かせていない場合は、彼の数字はMと比較します。m番目の数字と彼が等しい場合は、繰り返しの数字を見つけるために、彼はm番目の桁に、i番目の桁と等しくされていない場合にはm番目のデジタル・スイッチングを置きます
私たちは、重複番号を見つけるまで、その後、この比較および交換のプロセスを繰り返します。