-4

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

//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;
}
4

3 回答 3

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;
}
于 2013-05-20T23:18:51.200 回答
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++ 代码

于 2013-05-20T23:44:18.357 回答
0

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

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

于 2013-05-21T02:45:22.103 回答