0

重複としてマークする前に質問を読んでください

Util クラスを使用せずに配列から重複を削除する次のコードを作成しましたが、今はスタックしています

public class RemoveDups{
    public static void main(String[] args) {
        int[] a = { 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 3, 1, 4, 52, 1, 45, };

        int temp;
        for (int i : a) {
            for (int j = 0; j < a.length - 1; j++) {
                if (a[j] > a[j + 1]) {
                    temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                }
            }
        }
        a = removeDups(a);
        for (int i : a) {
            System.out.println(i);
        }

    }

    private static int[] removeDups(int[] a) {
        int[] result = new int[a.length];
        int j = 0;
        for (int i : a) {
            if (!isExist(result, i)) {
                result[j++] = i;
            }
        }

        return result;
    }

    private static boolean isExist(int[] result, int i) {
        for (int j : result) {
            if (j == i) {
                return true;
            }
        }
        return false;
    }

}

そして今、出力は

1
2
3
4
5
6
45
52
0
0
0
0
0
0
0
0
0
0

ここで私の問題は

  1. 0 の場合、コードが機能しない
  2. 配列を並べ替えると実行時間が短縮される方法を理解できません
  3. Util クラスを使用せずに配列から要素を削除する方法はありますか? 配列をリストに変換してから削除する 1 つの方法を知っていますが、そのためにも Util クラスが必要です。自分で実装する方法はありますか。
4

7 に答える 7

2
  1. 配列 a と同じ長さの結果配列を作成しているため、一意のアイテムのみを入れても、残りの空白のアイテムには、int 配列の場合は 0 である重複値が含まれます。
  2. コードは配列全体で重複を何度も検索しているため、並べ替えはあまり役に立ちません。そのためのロジックを変更する必要があります。
  3. 最初に結果配列のすべての配列項目に -1 のような負の値を入れることができます。次に、すべての負の値を削除することで、そこから finalResult 配列などの新しい結果配列を簡単に作成できます。すべてを削除するのにも役立ちます。ゼロ。
于 2013-10-04T07:05:50.573 に答える
1

0 の場合、コードが機能しない

配列には最初からゼロがありませんでした。しかし、そのためint[]、重複が削除された後、残りのインデックスは で埋められ0ます。そのため、配列に多数のゼロが表示されます。これらの 0 を取り除くには、サイズの小さい別の配列を作成する必要があります (サイズは、0 を除く、配列内の一意の数値の数と同じにする必要があります)。

配列を並べ替えることができる場合 (既に並べ替えられていることがわかります)、すべてのゼロを先頭に移動するか、最後にプッシュすることができます。それに基づいて、配列を反復処理し、配列内の実際の値の開始位置からインデックスを取得できます。そして、Arrays.copyOfRange(array, from, to)必要な要素のみを含む配列のコピーを作成するために使用できます。

于 2013-10-04T06:51:33.070 に答える
0

これを試して

 package naveed.workingfiles;



public class RemoveDups {
    public static void main(String[] args) {
        int[] a = { 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 3, 1, 4, 52, 1, 45, };
        removeDups(a);
    }

private static void removeDups(int[] a) {
    int[] result = new int[a.length];
    int j = 0;
    int count = 0;
    for (int i : a) {
        if (!isExist(result, i)) {
            result[j++] = i;
            count++;
        }
    }
    System.out.println(count + "_____________");
    for (int i=0;i<count;i++) {
        System.out.println(result[i]);
    }

    // return result;
}

private static boolean isExist(int[] result, int i) {
    for (int j : result) {
        if (j == i) {
            return true;
        }
    }
    return false;
}

}

于 2013-10-04T07:10:42.303 に答える