检查数组中哪些元素相同

时间:2014-10-10 21:23:14

标签: java

我试图检查数组中哪些元素是相同的,然后返回相同的元素。我想我必须在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());
}

2 个答案:

答案 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)

另一种方法是首先对数组进行排序(只要它们是数字或可以排序)。然后检查重复项是微不足道的。

使用QuickSortTimSort进行排序的平均值为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] + " ");
    }