java - 如何在不使用集合的情况下从 Java 中的给定数组中删除重复元素

标签 java arrays

我有一个这样的数组元素:

int arr[] = {1,1,2,2,3,3,4,4};

我想从中删除重复的元素。在网上搜索,了解到ArrayUtil类。你能告诉我它的用法吗 - 这就是我如何在输出中获得这样的数组:

arr[] = {1,2,3,4};

最佳答案

这是 Element Distinctness Problem 的下一步,在此线程中进行了彻底讨论:Find duplicates in an array ,包括问题的下限(如果不涉及哈希集,就不能比 O(nlogn) 做得更好)。

如果您不愿意使用散列集来检查您已经看到的所有元素,最好的办法是对数组进行排序,然后迭代它 - 所有重复的元素将彼此相邻。

public static int[] justUniques(int[] arr) { 
    if (arr == null || arr.length == 0) return arr;
    Arrays.sort(arr);
    int n = 1;
    for (int i = 1; i < arr.length; i++) {
        if (arr[i] != arr[i-1]) n++;
    }
    int[] res = new int[n];
    res[0] = arr[0];
    n = 1;
    for (int i = 1; i < arr.length; i++) {
        if (arr[i] != arr[i-1]) res[n++] = arr[i];
    }
    return res;

}

请注意,上面的一个简单变体也可以就地完成,无需创建新数组。

这个解决方案是 O(nlogn),因此是最优的。如果您不愿意使用 Arrays.sort() 算法,您可以实现自己的排序算法(这很容易)。

另一个提出类似问题但有额外限制的相关主题:Removing the duplicates from an array without disturbing the order of elements without using Sets

关于java - 如何在不使用集合的情况下从 Java 中的给定数组中删除重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31050573/

相关文章:

java - Add 方法将对象添加到数组中

java - 在 Maven 项目中重用常量和属性?

java - 如何在 if/else 语句中检查整数且小于或等于 100

java - 从 .jasper 文件获取 JasperPrint 对象

arrays - 响应为空结构

c++ - 根据世界位置在一维数组中查找通用项目?

java - JavaFX 中 ComboBox 的动态填充

java - 微调器选择是更新微调器项目之前的记录

c - C 程序中需要左值作为一元 '&' 操作数

java - 是什么导致了 java.lang.ArrayIndexOutOfBoundsException 异常?我该如何预防?