【发布时间】:2020-01-20 03:46:19
【问题描述】:
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 循环最多运行 n 次,它再次调用 reverseCharacters,其中包含一个 while 循环,该循环也将运行 n 次。这不意味着时间复杂度将是 O(n^2) 吗?
帮助函数中的代码是否已实际实施到 reverseWord 函数中,是否会改变空间或时间复杂度?
【问题讨论】:
-
澄清
n的意思,答案应该很明显。提示:与message在reverseCharacters中的长度无关。