多次重复打印独特元素
Posted
技术标签:
【中文标题】多次重复打印独特元素【英文标题】: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你的问题。 【参考方案1】:假设输入数组包含Comparable
或其他原始类型的元素,您可以按照以下步骤操作。目标本质上是找到length > 1
的所有链的最后一个元素。
-
使用
Arrays.sort
对数组进行排序(如有必要)。
迭代数组,从第二个元素开始。对于每个元素:
-
如果前面的元素等于当前元素,
并且后续元素不等于当前元素(或者如果没有后续元素)...
然后打印当前元素。
注意:如果您可以访问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
【讨论】:
以上是关于多次重复打印独特元素的主要内容,如果未能解决你的问题,请参考以下文章