打印数组真的是O(n)而不是O(1)吗?

时间:2019-10-01 13:09:53

标签: arrays time-complexity

根据“破解编码面试”中的此问题,打印数组为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循环打印每个字符。

我想念什么吗?

1 个答案:

答案 0 :(得分:2)

Big-O表示法没有明确说明其测量内容。您可以讨论占用O(n)内存或O(n)系统调用的算法。但是这里的解释清楚地表明我们在谈论 O(n)时间。没错-O(1)系统调用以打印O(n)个字符将花费O(n)时间。