java - 通过将元素移动到末尾来从数组中删除重复项

标签 java arrays algorithm

我需要编写将 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/

相关文章:

algorithm - 在未排序的数组中查找特定比率。时间复杂度

java - AnnotationSessionFactoryBean 的问题

javascript - 通过另一个对象数组过滤对象数组

java - 获取算法的运行时间

javascript - 生成多数组的排列

javascript - 迭代二维数组

java - 如何在MVC项目中处理Spring Bean的继承

java - Map.keySet 和 Map.values 上的迭代顺序相同吗?

java - NullPointerException 但不明白为什么

c# - 在数组上使用 System.Linq 中的 .Any 查找字符串