我正在重新排列数组的条目,以便偶数(被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)如何?
答案 0 :(得分:2)
您使用固定的空间来重新排序列表。根据定义,该值为 O(1)。您处理的长度为A
的事实不计入函数的空间使用情况:A
已由问题定义分配。您所添加的就是两个整数next_even
和next_odd
:它们是您的 O(1)。
每个OP评论的更新
A
的大小不会“抵消”您的空间复杂度,因为您的算法使用的是调用程序已经提供的空间。您尚未添加任何内容。
对不起;我没有意识到您对时间复杂度有未解决的问题。是的,您的猜测是正确的:您经历while
次N-1
循环(N = len(A)
);每次迭代不超过固定的时间量。因此,时间复杂度受N
的限制。
答案 1 :(得分:-1)
我想这里的意思是重新排序所需的“附加”内存是o(1),不包括原始数组。