【问题标题】:Printing unique elements repeated more than once多次重复打印独特元素
【发布时间】:2017-12-18 16:53:38
【问题描述】:

如何在 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]+" ");
}

输出是数组中的所有唯一元素,但我正在尝试打印多次重复的元素。

【问题讨论】:

  • 您认为自己先尝试自己做功课对您有帮助吗?然后发布您在其中遇到困难的代码以获得一些集中的帮助?
  • for 循环是你的朋友...
  • 到目前为止你做了什么??我们不是来做你的功课的
  • 我投票结束这个问题作为离题,因为这个问题显示零努力
  • @GurzSingh 如果你想加入你的尝试,请edit你的问题。

标签: java


【解决方案1】:

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

  1. 使用Arrays.sort 对数组进行排序(如有必要)。
  2. 迭代数组,从第二个元素开始。对于每个元素:
    1. 如果前面的元素等于当前元素, 并且后续元素等于当前元素(或者如果没有后续元素)...
    2. 然后打印当前元素。

注意:如果您可以访问HashMap,则此 O(n log(n)) 算法会有一个 O(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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-07
    • 2015-02-04
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 2021-05-03
    相关资源
    最近更新 更多