使用方法删除数组中的重复项

时间:2013-05-20 23:04:33

标签: java

我正在尝试使用方法从数组中删除重复的数字,但遗憾的是我无法解决它。这就是我到目前为止所做的:

//method code
public static int[] removeDuplicates(int[] input){
    int []r=new int[input.length];

    for (int i = 0; i < input.length; i++) {
        for (int j = 0; j < input.length; j++) {
            if ((input[i]==input[j]) && (i != j)) {
                return r;
            }
        }
    }
    return r;
}

3 个答案:

答案 0 :(得分:1)

最简单的方法是在Set中添加所有元素。

public static int[] removeDuplicates(int[] input){
    Set<Integer> set = new HashSet<Integer>();
    for (int i = 0; i < input.length; i++) {
        set.add(input[i]);
    }
    //by adding all elements in the Set, the duplicates where removed.
    int[] array = new int[set.size()];
    int i = 0;
    for (Integer num : set) {
        array[i++] = num;           
    }
    return array;
}

答案 1 :(得分:1)

你可以这样做:

public static int[] removeDuplicates(int[] input){
    boolean[] duplicate = new boolean[input.length];
    int dups = 0;
    for (int i = 0; i < input.length; i++) {
        if(duplicate[i])
            continue;
        for (int j = i + 1; j < input.length; j++) {
            if ((input[i]==input[j])) {
                duplicate[j] = true; // j is duplicate
                ++dups;
            }
        }
    }
    int[] r = new int[input.length] - dups;
    int index = 0;
    for(int i = 0; i < input.length; ++i)
        r[index++] = input[i];
    return r;
}

也可以在O(n log n)中完成。 C++ code

答案 2 :(得分:0)

如果你不想在你的收藏中重复,那么你首先不应该使用数组。改为使用集合,您将永远不会重复删除。

如果您“有时”不想要重复,那么您最好进一步解释您的情况。