我正在尝试使用方法从数组中删除重复的数字,但遗憾的是我无法解决它。这就是我到目前为止所做的:
//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;
}
答案 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)
如果你不想在你的收藏中重复,那么你首先不应该使用数组。改为使用集合,您将永远不会重复删除。
如果您“有时”不想要重复,那么您最好进一步解释您的情况。