奇偶数的O(1)空间复杂度

时间:2018-08-02 17:39:10

标签: python arrays time-complexity space-complexity

我正在重新排列数组的条目,以便偶数(被2整除)首先出现。代码段如下:

def even_odd(A):
    next_even , next_odd = 0, len(A) - 1
    while next_even < next_odd:
        if A[next_even] % 2 == 0:
           next_even += 1
        else:
           A[next_even], A[next_odd] = A[next_odd], A[next_even]
           next_odd -= 1

时间复杂度以 O(N)给出,我猜这是因为我要遍历整个数组吗?但是空间复杂度 O(1)如何?

2 个答案:

答案 0 :(得分:2)

您使用固定的空间来重新排序列表。根据定义,该值为 O(1)。您处理的长度为A的事实不计入函数的空间使用情况:A已由问题定义分配。您所添加的就是两个整数next_evennext_odd:它们是您的 O(1)


每个OP评论的更新

A的大小不会“抵消”您的空间复杂度,因为您的算法使用的是调用程序已经提供的空间。您尚未添加任何内容。

对不起;我没有意识到您对时间复杂度有未解决的问题。是的,您的猜测是正确的:您经历whileN-1循环(N = len(A));每次迭代不超过固定的时间量。因此,时间复杂度受N的限制。

答案 1 :(得分:-1)

我想这里的意思是重新排序所需的“附加”内存是o(1),不包括原始数组。