根据“破解编码面试”中的此问题,打印数组为O(N),但我看不到为什么它不是O(1)。我们有以下代码:
void permutation(String str) {
permutation(str, "");
}
void permutation(String str, String prefix) {
if (str.length() == 0) {
System.out.println(prefix);
} else {
for (int i= 0; i < str.length(); i++) {
String rem = str.substring(0, i) + str.substring(i + 1);
permutation(rem, prefix + str.charAt(i));
}
}
}
在解释中说:
Executing line 7 takes 0( n) time since each character needs to be printed.
这是为什么?据我所知,打印始终为O(1)。打印数组时,它会一次完成所有操作,除非您使用for循环打印每个字符。
我想念什么吗?
答案 0 :(得分:2)
Big-O表示法没有明确说明其测量内容。您可以讨论占用O(n)内存或O(n)系统调用的算法。但是这里的解释清楚地表明我们在谈论 O(n)时间。没错-O(1)系统调用以打印O(n)个字符将花费O(n)时间。