打印多次重复的独特元素

时间:2017-07-13 18:34:27

标签: java

如何打印一个唯一的数组,该数组由只在Java中的原始数组中重复多次的元素组成?例如,有一个数组a = {1,2,2,2,3,4,5,5},输出应为{2,5}。它应该只使用数组。

我尝试了这个问题,这是我到目前为止所做的:

for (int i = 0; i < a.length; i++) {
    int j;
    for (j = 0; j < i; j++) {
        if (a[i] == a[j]) break;
    }
    if (i == j) System.out.print(a[i]+" ");
}

输出是数组中的所有唯一元素,但我试图打印那些特别重复的元素。

1 个答案:

答案 0 :(得分:0)

假设输入数组包含Comparable或其他原始类型的元素,您可以按照以下步骤操作。目标主要是找到length > 1的所有链的最后一个元素。

  1. 使用Arrays.sort排序数组(如有必要)。
  2. 对数组进行迭代,从第二个元素开始。对于每个元素:
    1. 如果,前面的元素等于当前元素, 后续元素等于当前元素(或者如果没有后续元素)...
    2. 然后打印当前元素。
  3. 注意:如果您有权访问HashMap,则会有O(n)版本的此O(n log(n))算法。

    这是代码:

    public static void printDuplicates(int[] a) {
        Arrays.sort(a);
        for (int i = 1; i < a.length; i++) {
            boolean precIsEqual = (a[i-1] == a[i]);
            boolean succIsEqual = (i+1 != a.length) && (a[i+1] == a[i]);
            if (precIsEqual && !succIsEqual) {
                System.out.print(a[i] + " ");
            }
        }
    }
    

    Ideone Demo

    输出:2 5