我需要帮助的问题是:
i
我理解j
和 public boolean isPalindrome(String input) {
char[] inputChars = input.toCharArray();
int inputLength = inputChars.length;
int inputMid = inputLength / 2;
for (int i = 0; i <= inputMid; i++) {
if (inputChars[i] != inputChars[inputLength - i - 1]) {
return false;
}
}
return true;
}
循环是如何O(n ^ 4)。但是,从if语句开始,我不知道剩余代码片段的大O是什么。如果我在课堂上正确地复制了答案,则O(n ^ 4)是整个代码片段的运行时间。因此,从if开始的运行时间似乎可以忽略不计。那么,我仍然想了解它是什么以及为什么我把答案变为O(n ^ 5)。
答案 0 :(得分:0)
代码的整体复杂性实际上是O(n^4)
,而不是O(n^5)
。条件i == j
将针对i
和j
中两个外部循环范围内的每个值发生一次。由于每个循环中都有n^2
个可能的值,i == j
将发生n^2
次。每次发生这种情况时,k
中会有第三个循环,它会迭代n
次。因此,每次i == j
发生时,都会有O(n)
惩罚。总的来说,这表现为O(n^3)
事件,它使两个外环的O(n^4)
性能相形见绌。
因此,尽管有O(n^4)
条件,但您的代码段的行为仍为i == j
。
答案 1 :(得分:0)
O(n ^ 4)是正确的答案。前两个循环具有O(n ^ 4)时间复杂度。部分代码从&#39; if&#39;开始陈述,复杂性是O(n ^ 3),因为&#39; i&#39;和&#39; j&#39;恰好等于n * n次,并且存在另一个for循环,其将时间复杂度增加到O(n ^ 3)。 因此,O(n ^ 4)+ O(n ^ 3)= O(n ^ 4)