2016-04-14 42 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。我會編輯它。 –