[英]What's the time complexity of below program?
這個程序的時間復雜度是多少? 我們根據任意大的輸入計算時間復雜度。 在這個例子中,輸入字符串可能非常大,但如果它沒有空格,那么它只是 O(n)。 如果字符串有空格,它將是 O(n * numberOfWords),我可以將其視為 O(n^2) 時間復雜度嗎? 先感謝您!
public static String revEachWord(String str) {
String reversed = "";
String[] words = str.split(" ");
for(String word : words) {
String reversedWord = "";
for(int i = word.length() - 1; i >= 0; i--) {
reversedWord += word.charAt(i);
}
reversed += reversedWord + " ";
}
return reversed.trim();
}
Aleksey指出它是O(numberOfWords * averageWordLength)
。 這是正確的(如果我們暫時忽略+=
),但更一般的答案是輸入的長度n
。 由於n = numberOfWords * averageWordLength
,我們可以說它是O(n)
或線性的。
但這並不完全正確。 正如chrylis在評論中指出的那樣,由於您使用+=
來構建字符串,因此需要更長的時間:每個副本的O(n)
和numberOfWords
總副本,對於O(n * numberOfWords)
總計,或O(n^2)
在最壞的情況下。 (實際上,它可能比這更糟;我沒有考慮嵌套循環中的+=
。)哎呀。 最好開始使用StringBuilder
以獲得良好的O(n)
運行時間。
O(numberOfWords * averageWordLength)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.