如何打印一个唯一的数组,该数组由只在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]+" ");
}
输出是数组中的所有唯一元素,但我试图打印那些特别重复的元素。
答案 0 :(得分:0)
假设输入数组包含Comparable
或其他原始类型的元素,您可以按照以下步骤操作。目标主要是找到length > 1
的所有链的最后一个元素。
Arrays.sort
排序数组(如有必要)。注意:如果您有权访问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] + " ");
}
}
}
输出:2 5