繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM