你得到一个大小为K的数组,其中填充的数字介于1..N之间,打印出此数组中缺少的1到N之间的所有数字。 解决方案应该以最佳的复杂性工作。
感谢。
答案 0 :(得分:0)
for i := n - k + 1 to n
A[i] := A[1]
end for
for i := 1 to n - k
while A[A[i]] != A[i]
swap(A[i], A[A[i]])
end while
end for
for i := 1 to n
if A[i] != i then
print i
end if
end for
代码在O(n)时间内运行。交换仅发生if A[i] != i
。