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 сначала вызывает reverseCharacters, который имеет временную сложность O (n) и пространственную сложность O (1).
Затем for для l oop, который будет работать максимум из n раз, и он вызывает reverseCharacters опять же, который содержит время l oop, которое также будет запускаться n раз. Разве это не означает, что сложность по времени будет O (n ^ 2)?
Был ли код из вспомогательной функции фактически включен в функцию reverseWord, изменяет ли он сложность пространства или времени?