[英]Remove duplicates from array by shifting elements to the end
我需要编写将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);
}
你能帮我吗? 非常感谢!
当您得到比赛时,只需交换最新的最后位置即可。 试试这个:
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);
}
谨慎使用Collections API。 LinkedHashSet如下所示:
public static String[] remove(String[] array) {
return Arrays.copyOf(array, new LinkedHashSet<String>(Arrays.asList(array)).size());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.