[英]How is this solution to reversing words in a sentence O(N) when it calls reverse on the whole sentence and then reverse on each word?
http://www.geeksforgeeks.org/reverse-words-in-a-given-string/
當它在整個句子上調用反向然后在每個單詞上反向時,如何解決句子O(N)中的反向單詞?
N =整個弦的長度M =每個弦的長度
不是O(N)+ O(N * M)嗎? 用M表示字符串的長度是否正確,因為每個輸入的M可以不同?
您正在重用N
來表示兩種不同的含義。 確實應該有三個變量:
N
是整個字符串的長度 M
是字符串中的單詞數 O
是每個單詞的(平均)長度 然后,您的整個算法將在O(N + M*O)
。 但是, M*O
總是小於N
,因為字符串是由單詞和分隔它們的空格組成的。 因此,您可以將整個事情簡化為O(N)
。
如果您使用N作為整個字符串的長度,那么您不應該使用N * M來表示每個單詞的反轉,它只是N,因為您要遍歷整個字符串本身兩次:一次反轉它,一次反轉單個單詞。
編輯:如果給定了一個字符串列表,並且您想要反轉列表的順序,然后反轉字符串本身,那么它將是O(N)+ O(L * M),其中N是數字數組中元素的個數,M是單詞的長度,因為數組與單詞是分開的。 您可以反轉數組的順序而無需反轉單詞,因此這是與單詞分開的計算。 反轉單詞時,它是單詞的長度乘以您要反轉的單詞數。
查看代碼的作用:
棘手的部分是單詞的反轉。 由於單詞都是同一句子的一部分,因此您可以將它們視為整個句子的另一遍歷。
這使得:
所以整個事情就是O(3n),也就是O(n)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.