我需要编写将 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);
}
关于java - 通过将元素移动到末尾来从数组中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51472593/