嵌套 for 循环以比较对

Nested for loop to compare pairs

我的 java 项目在这里有一个小问题,我将其简化为以下代码。 我的代码打印出来:

索引 0 和 1 指向相同的值。 索引 1 和 0 指向相同的值。 索引 3 和 4 指向相同的值。 索引 4 和 3 指向相同的值。

但我想要的是:

索引 0 和 1 指向相同的值。 索引 3 和 4 指向相同的值。

因为 0 和 1,1 和 0 真的是一对,有什么建议吗?

int[] arr={4,4,5,6,6,};
    
    for(int n=0; n<arr.length; n++)
    {
        for(int m=0; m<arr.length; m++)
        {
            if(arr[n]==arr[m] && n!=m)
            {
                System.out.println("Index "+n+" and "+m+" are pointing to same value.");
            }
        }
    }

如果你想过滤掉重复的, 将 for(int m=0; m<arr.length; m++) 更改为 for(int m=n+1; m<arr.length; m++)

试试这个。

int[] arr = {4,4,5,6,6,};

for(int n=0; n<arr.length; n++)
{
    for(int m=0; m<arr.length; m++)
    {
        if(arr[n]==arr[m] && n!=m && m > n || n == 0 && m == 0)
        {
            System.out.println("Index "+n+" and "+m+" are pointing to same value.");
        }
    }
}

解分解递归回想等问题时可以尝试学习一些解题技巧
https://www.youtube.com/watch?v=S47aSEqm_0I
讲座能教你很多。

int[] arr={4,4,5,6,6,};

        for(int n=0; n<arr.length; n++)
        {
            for(int m=n; m<arr.length; m++)
            {
                if(arr[n]==arr[m] && n!=m)
                {
                    System.out.println("Index "+n+" and "+m+" are pointing to same value.");
                }
            }
        }
    int[] arr={4,4,5,6,6,};

    for (int n = 0; n < arr.length; n++) {
        for (int m = 0; m < arr.length; m++) {
            if (arr[n] == arr[m] && n != m) {
                if (m > 0 && n + 1 < arr.length) {
                        System.out.println("Index " + n + " and " + m + " are pointing to same value.");
                }
            }
        }
    }

您可以使用哈希映射来提高速度。

int[] arr = {4, 4, 5, 6, 6,};
    Map<Integer, Integer> map = new HashMap<>();
    for (int i = 0; i < arr.length; i++) {
        int num = arr[i];
        if (map.containsKey(num)) {
            System.out.println("Index " + map.get(num) + " and " + i + " are pointing to same value.");
            map.remove(num);
        } else
            map.put(arr[i], i);
    }