我试图检查数组中哪些元素是相同的,然后返回相同的元素。我想我必须在for循环中做一个for循环,但我不确定。这就是我到目前为止所做的:
for (int p = 0 ; p < temperatures.length ; p++) {
for (int j = 0 ; j < temperatures.length ; j++) {
if (temperatures[p] == temperatures[j]) {
System.out.println("matching" + j + p);
}
}
}
我是如何创建数组的:
for(int i = 0; i < temperatures.length; i++) {
System.out.println("Please enter the temperature in Celcius for day " + (i+1));
temperatures[i] = new Data(input.nextDouble());
}
答案 0 :(得分:0)
它说7场比赛的原因是由于
for(int j = 0; j < temperatures.length; j++)
{
if(temperatures[p] == temperatures[j]) // This will have te..[0]==te..[0] .... te..[1]==te..[1] .... te..[6]==te..[6]
您应该将其更改为
for(int j = p+1; j < temperatures.length; j++)
{
if(temperatures[p] == temperatures[j]) //Here there's no chance of p==j. So this will work.
答案 1 :(得分:0)
另一种方法是首先对数组进行排序(只要它们是数字或可以排序)。然后检查重复项是微不足道的。
使用QuickSort
或TimSort
进行排序的平均值为O(n log n)
,您可以在O(n)
中告诉重复项。如果您无法修改原件,则需要额外O(n)
的空间和时间(复制)。
请注意,Arrays.sort(double[])
为O(n log n)
。
此算法为O(2n log n)
,即O(n log n) = O(log n!)
。
随机整数的简单示例。
int[] d = ThreadLocalRandom.current().ints(100, 0, 100).toArray();
Arrays.sort(d); // O(n log n)
boolean dup = false;
for (int i = 1; i < d.length; i++) { // O(n)
if (d[i - 1] == d[i]) {
dup = true;
} else {
if (dup) {
System.out.print(d[i - 1] + " ");
}
dup = false;
}
}
System.out.println("");
for (int i = 0; i < d.length; i++) {
System.out.print(d[i] + " ");
}