2016-04-14 43 views
-6

什么是运行时间什么是这个算法的运行时间

String[] stringCombo = new String[5]; 
    for (int i = 0; i < stringCombo.length; i++) { 
     stringCombo[i] = deleteCharAt(s,i); 
     s = original; 
    } 

我不知道如果是O(N),因为长度固定为5

private static String deleteFirstChar(String s) { 
    return s.substring(1); 
} 
+3

它取决于运行时间deleteCharAt() – Natecat

+0

在这些问题中,'N'必须表示一些东西。这里是什么? 5个字符串中的字符总数? –

+0

private static String deleteFirstChar(String s){s} {return s.substring(1); } – Doejo

回答

1

这是[String]的Java源代码。看看substring,你会发现substring(..)的顺序是O(1)(在Java 6之前)。 [[对于Java> = 7,子实际上涉及(子)阵列是一个O(N)操作的复制(见下文保罗博丁顿的评论)]]

你正在做此5倍,这是固定 。所以,不管N(?),这段代码将运行5次。

问:您认为这取决于N

答:

订单是O(1)。

+0

您正在查看'substring'旧版本。它曾经是'O(1)',但现在它的字符数是线性的,因为它复制了数组。 http://stackoverflow.com/questions/16123446/java-7-string-substring-complexity –

+1

哦,是的!数组的拷贝是Java> = 7的'O(N)'操作。我一直犯这个错误!谢谢,@PaulBoddington。我会编辑它。 –