剣は、オファーの配列で繰り返される数を指します

ここに画像の説明を挿入
方法1:

    public boolean duplicate(int numbers[],int length,int [] duplication) {
    
    
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 0;i<length;i++) {
    
    
            if (list.contains(numbers[i])) {
    
    
                duplication[0] = numbers[i];
                return true;
            }else {
    
    
                list.add(numbers[i]);
            }
        }
        return false;

    }

方法2:
配列内の各数値が配列の長さよりも短いことがわかっているので、配列内に繰り返し数値がない場合は、配列を小さいものから大きいものに並べ替えて、i-に対応する要素値を満たす必要があります。 thの位置はiです。この機能を使用します(配列{2、3、1、0、2、5、3}、ポインター '|'):

| 2 3 1 0 2
53このときのポインタ '|'の位置は0で、配列の位置0の要素の値は2、2!= 0であり、位置0と位置の要素を交換します。配列内の2。
| 1 3 2 0 2
53ポインタ '|'の位置はまだ0であり、配列の位置0の要素の値は1、1!= 0であり、位置0と位置1の要素を交換します。配列。
| 3 1 2 0 2
53ポインタ '|'の位置はまだ0であり、配列の位置0の要素の値は3、3!= 0であり、位置0と位置3の要素を交換します。配列。
| 0 1 2 3 2 5 3
ポインタ '|'の位置はまだ0ですが、配列の位置0にある要素の値は0、0 == 0であり、ポインタ '|'は1ビット移動します右の方へ。
0 | 1 2 3 2
53このときのポインタ '|'の位置は1ですが、配列内の位置1の要素の値は1であり、1 == 1です。ポインタ '|'を1つ移動します。少し右に。
0 1 | 2 3 2
53このときのポインタ「|」の位置は2ですが、配列の位置2の要素の値は2、2 == 2であり、ポインタ「|」が移動します。右に1ビット。
0 1 2 | 3 2
53このときのポインタ '|'の位置は3ですが、配列内の位置3の要素の値は3であり、3 == 3です。ポインタ '|'を1つ移動します。少し右に。
0 1 2 3 | 2
53このときのポインタ '|'の位置は4、配列の位置4の要素の値は2、2!= 4、位置の要素の値は4と配列の位置2が等しい場合、この要素の値を出力します。

    public boolean duplicate2(int numbers[],int length,int [] duplication) {
    
    
             if (numbers == null||numbers.length == 0) {
    
    
                 return false;
             }
             for (int i = 0;i<length;i++) {
    
    
                 while (numbers[i] != i) {
    
    
                     if (numbers[i] == numbers[numbers[i]]) {
    
    
                         duplication[0] = numbers[i];
                         return true;
                     }
                     int tmp = numbers[i];
                     numbers[i] = numbers[tmp];
                     numbers[tmp] = tmp;
                 }
             }
             return false;

    }

おすすめ

転載: blog.csdn.net/AIJXB/article/details/113634558