Time complexity 3-sum的性能分析

Time complexity 3-sum的性能分析,time-complexity,asymptotic-complexity,big-o,Time Complexity,Asymptotic Complexity,Big O,我有一个方法,可以在一个数组中找到3个加起来就是所需数字的数字 代码: publicstaticvoidthreesum(int[]arr,int-sum){ 快速排序(arr,0,arr.length-1); 对于(int i=0;ij时,内部forloop才会运行,因此您可以想到n^2*(n/2),但在大O表示法中,您可以忽略这一点。这是一个O(n^3)复杂度,因为有三个嵌套的forloop。只有当k>j时,内部forloop才会运行,因此您可以考虑n^2*(n/2),但在大O表示法中,您可

我有一个方法,可以在一个数组中找到3个加起来就是所需数字的数字

代码:

publicstaticvoidthreesum(int[]arr,int-sum){
快速排序(arr,0,arr.length-1);
对于(int i=0;ij;k--){
如果((arr[i]+arr[j]+arr[k])==和){
System.out.println(Integer.toString(i)+“+”+Integer.toString(j)+“+”+Integer.toString(k)+“=”+和);
}
}
}
}
}

我不确定这种方法的重要性。我现在很难对这件事了如指掌。我猜是O(n^2)或O(n^2logn)。但这些完全是猜测。我无法证明这一点。有人能帮我把这件事想清楚吗

您在阵列上有三个循环(i、
j
k
循环),其大小主要取决于阵列的大小
n
。因此,这是一个O(n3)操作。

您在阵列上运行了三次(i、
j
k
循环),其大小主要取决于阵列的大小。因此,这是一个O(n3)操作。

这是一个O(n^3)复杂度,因为有三个嵌套的forloop。只有当
k>j
时,内部forloop才会运行,因此您可以想到n^2*(n/2),但在大O表示法中,您可以忽略这一点。

这是一个O(n^3)复杂度,因为有三个嵌套的forloop。只有当
k>j
时,内部forloop才会运行,因此您可以考虑n^2*(n/2),但在大O表示法中,您可以忽略这一点。

即使您的快速排序是
O(nlogn)
,但有3个嵌套for循环,这一事实使它黯然失色。因此,时间复杂度w.r.t元素数(n)是
O(n^3)

即使您的快速排序是
O(nlogn)
,但有3个嵌套for循环这一事实使其黯然失色。因此,时间复杂度w.r.t元素数(n)是
O(n^3)

系统地说,增长复杂度的顺序可以精确地推断如下:


有条不紊地说,增长复杂性的顺序可以准确地推断如下:

它的O(n^3)复杂性它的O(n^3)复杂性
public static void threeSum(int[] arr, int sum) {
    quicksort(arr, 0, arr.length - 1);
    for (int i = 0; i < arr.length - 2; i++) {
        for (int j = 1; j < arr.length - 1; j++) {
            for (int k = arr.length - 1; k > j; k--) {
                if ((arr[i] + arr[j] + arr[k]) == sum) {
                    System.out.println(Integer.toString(i) + "+" + Integer.toString(j) + "+" + Integer.toString(k) + "="  + sum);
                }
            }
        }
    }
}