从1到N之间的数字数组中打印缺少的数字

时间:2017-01-05 21:53:30

标签: arrays

你得到一个大小为K的数组,其中填充的数字介于1..N之间,打印出此数组中缺少的1到N之间的所有数字。 解决方案应该以最佳的复杂性工作。

感谢。

1 个答案:

答案 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