在O(n ^ 2)中查找数组中的所有三元组

时间:2016-03-12 21:48:38

标签: java arrays algorithm

我正在尝试打印数组中的所有三元组,与3SUM或类似的东西不同,它们不满足任何条件。我只想打印它们。

我的简单解决方案

        for (int i = 0; i < arr.length - 2; i++) {
            for (int j = i + 1; j < arr.length - 1; j++) {
                for (int k = j + 1; k < arr.length; k++){
                    System.out.println(arr[i] + " " + arr[j] + " " + arr[k]);
                }
            }
        }

O(n^3)中运行,其三元组数量为((n)*(n-1)*(n-2))/(3!)

所以我的问题是,这可以比O(n^3)更快地完成吗?

2 个答案:

答案 0 :(得分:3)

n choose 3,即三胞胎组合的数量,是 O(n^3) 的。
所以不,理论上不可能做得更好,因为仅仅操作打印它们将采用 O(n^3) 操作。

答案 1 :(得分:2)

您无法在position == undefined操作中打印n^3三胞胎。

如果计算时间有问题,您可以在n^3个帖子中划分您的打印操作,理论上这样可以减少n的时间。