我需要编写一个将String []数组作为输入并返回给定的数组而不重复的方法。不允许在方法内部使用其他数组,所有逻辑必须在输入数组中完成。所有重复项都必须移到数组末尾并被截断。方法的模板:
public String[] remove(String[] array) {
//Logic is here
return Arrays.copyOf(array, array.length - numberOfDuplicates)
}
这是我到目前为止所做的。这适用于某些输入,但有时会给出错误的结果:
public String[] remove(String[] array) {
int numberOfDuplicates = 0;
for (int i = 0; i < array.length - 1 - numberOfDuplicates; i++) {
for (int j = 0; j < array.length - 1 - numberOfDuplicates; j++) {
if (i != j && array[i].equals(array[j])) {
String temp = array[array.length - 1 - numberOfDuplicates];
array[array.length - 1 - numberOfDuplicates] = array[j];
array[j] = temp;
numberOfDuplicates++;
}
}
}
return Arrays.copyOf(array, array.length - numberOfDuplicates);
}
可以帮我吗?非常感谢!
答案 0 :(得分:0)
当您得到比赛时,只需换成最新的最后位置即可。试试这个:
public static String[] remove(String[] array) {
int len = array.length;
for (int i = 0; i < len; i++) {
for (int j = i+1; j < len && j > 0; j++) {
if(array[i].equals(array[j])){
String tmp = array[len -1];
array[len - 1] = array[j];
array[j] = tmp;
len--;
j--;
}
}
}
return Arrays.copyOf(array, len);
}
答案 1 :(得分:0)
请谨慎使用 Collections API。 LinkedHashSet 如下所示:
public static String[] remove(String[] array) {
return Arrays.copyOf(array, new LinkedHashSet<String>(Arrays.asList(array)).size());
}