public static void reverseWords(char[] message) {
reverseCharacters(message, 0, message.length - 1);
int currentWordStartIndex = 0;
for (int i = 0; i <= message.length; i++) {
if (i == message.length || message[i] == ' ') {
reverseCharacters(message, currentWordStartIndex, i - 1);
currentWordStartIndex = i + 1;
}
}
}
private static void reverseCharacters(char[] message, int leftIndex, int rightIndex) {
while (leftIndex < rightIndex) {
char temp = message[leftIndex];
message[leftIndex] = message[rightIndex];
message[rightIndex] = temp;
leftIndex++;
rightIndex--;
}
}
乍一看,这似乎具有O(n)的时间复杂度和O(1)的空间复杂度,作者也提出了这个想法。然而,reverseWords函数首先调用具有O(n)时间复杂度和O(1)空间复杂度的reverseCharacters函数。
然后,for循环最多运行n次,并且它再次调用具有while循环的reverseCharacters函数,该while循环也将运行n次。这是否意味着时间复杂度将合并为O(n²)?
如果来自辅助函数的代码实际上已经被实现到reverseWord函数中,会改变空间或时间复杂度吗?
n
是什么意思,答案就会显而易见了。提示:它与reverseCharacters
中的message
长度无关。 - Joseph Sible-Reinstate Monica