Java 列表中的配对

Java 列表中的配对,java,algorithm,Java,Algorithm,在Java中,找到列表中所有数字的唯一对的最佳方法是什么?我有一个解决方案,我将列表转换成一个数组,然后基本上将第一个元素与第二个元素配对,然后将第一个元素与第三个元素配对,依此类推。。然而,结果是O(n^2)。 以下是我的基本伪代码: int arr[] = convertListToArray(arrList) for i=1;i< arr.length; i++ for j =1+1; j<arr.length; j++ print arr

在Java中,找到列表中所有数字的唯一对的最佳方法是什么?我有一个解决方案,我将列表转换成一个数组,然后基本上将第一个元素与第二个元素配对,然后将第一个元素与第三个元素配对,依此类推。。然而,结果是O(n^2)。 以下是我的基本伪代码:

int arr[] = convertListToArray(arrList) 
   for i=1;i< arr.length; i++
     for j =1+1; j<arr.length; j++
          print arr[i] , arr[j]
int-arr[]=convertListToArray(arrList)
对于i=1;i对于j=1+1;j如果数字集受到约束,在某些情况下可以使用一些技巧。从根本上说,你的问题是n^2,但在一般情况下,你没有很多选择

如果只需要唯一对,则可以从
列表
中删除重复项(例如,将其转储到
集合
中,然后再次退出),然后对其进行迭代

然后,迭代所有唯一对将是:

for (int i=0;i<len;i++) {
    for (j=i+1;j<len;j++) {
    }
}

for(int i=0;i假设没有重复项,将有N个选择2=N(N-1)/2个不同的对,这显然是O(N^2)。避免重复项可以通过首先删除原始列表中的重复项来完成(这将是一个额外的O(N log N)操作)。请注意,这将删除任何一对相等的值。

此代码在
O(n)
中查找重复项。将项添加到
HashSet
需要
O(1)
。我们添加
n
项,因此需要
O(n)
。接下来:

public static void main(String[] args) throws Exception {
    List<Integer> list = Arrays.asList(new Integer[] { 1, 2, 3, 4, 5, 6, 2, 4, 6 });
    Set<Integer> set = new HashSet<>();
    for (Integer value : list) {
        if (!set.add(value)) System.out.printf("%d is at least a duplicate\n", value);
    }
}
publicstaticvoidmain(字符串[]args)引发异常{
List=Arrays.asList(新的整数[]{1,2,3,4,5,6,2,4,6});
Set=newhashset();
for(整数值:列表){
如果(!set.add(value))System.out.printf(“%d至少是一个重复的\n”值);
}
}

先对其排序,然后在数组上迭代?删除重复项将是
O(n)
,因为您可以将内容转储到
集合中,该集合具有
O(1)
添加()