2017-03-01 50 views
-1

如何获取ThreeSum.java中函数count和printall的时间复杂度?如何找到3Sum.java的渐近复杂度

public static void printAll(int[] a) { 
    int n = a.length; 
    for (int i = 0; i < n; i++) { 
     for (int j = i+1; j < n; j++) { 
      for (int k = j+1; k < n; k++) { 
       if (a[i] + a[j] + a[k] == 0) { 
        System.out.println(a[i] + " " + a[j] + " " + a[k]); 
       } 
      } 
     } 
    } 
} 


public static int count(int[] a) { 
    int n = a.length; 
    int count = 0; 
    for (int i = 0; i < n; i++) { 
     for (int j = i+1; j < n; j++) { 
      for (int k = j+1; k < n; k++) { 
       if (a[i] + a[j] + a[k] == 0) { 
        count++; 
       } 
      } 
     } 
    } 
+0

仅在此处张贴您的代码。 –

+0

好的谢谢:)完成 – unnieyah

+0

你不必把这个评论放在你自己的问题上,如果他们发现它是重复的,其他人会这样做。 –

回答

0

虽然时间复杂性问题有时非常艰难,但这是一个简单的蛋糕。你可以简单地检查出来如下,

for (int i = 0; i < n; i++) // it runs for n times 
     for (int j = i+1; j < n; j++) // it runs for n-i-1 time 
      for (int k = j+1; k < n; k++) // it runs for n-j-1 times 

现在,因为他们是嵌套的循环,这意味着每一个内循环运行尽可能多的次数外环。

total = n * (n-i-1) * (n-j-1) 
     = n^3 ... // ignoring all other lower power terms 

所以这段代码的时间复杂度将是O(n^3)

+0

谢谢你:D ... – unnieyah

+0

如果它可以帮助你友善地接受答案,以便其他人也可以从中获得帮助。 –

+0

完成。所以if语句根本不会影响时间复杂性? – unnieyah