【3.配列の重複数】剣指offer-JAVA実現

696 ワード

タイトルは1つの長さnの配列の中のすべての数字が0からn-1の範囲内にあることを説明します.配列の中にはいくつかの数字が重複しているが、いくつかの数字が重複しているのか分からないし、各数字が何回重複しているのか分からない.配列のいずれかの重複する数字を見つけてください.要求時間複雑度O(N)、空間複雑度O(1)例:
 Input:
 {2, 3, 1, 0, 2, 5}
 Output:
 2 

第2種の解題の構想:Arraysを並べ替えます.sortは高速排出時間複雑度nlogn
第3の解題構想:ハッシュテーブルを作成して空間nの代価で時間複雑度nに変える
第4種(正解)解題構想:a[i]=iをa[i]=a[a[i]]に繰り返し配列duplicationで取り出す.
コード:public class Three{
public boolean duplicate(int a[],int length,int []duplication) {
    if(a==null||length<=0) return false;
    for(int i=0;i

}