假设我们有一个长度为n的数组A,其中包含它的索引从0到n-1的随机排列。是否可能重新排列数组,使其结果为A[A[i]],并且需要常数O(1)内存开销?
例子:
A = [ 3, 2, 0, 1 ]
rearrange( A )
A = [ 1, 0, 3, 2 ]
如果可能的话,提供算法概述会很好。否则,请解释为什么不可能。由于原地排序是一件事情,因此这个问题可能类似。
澄清:如果您没有内存限制,该算法就很简单:
A = [ 3, 2, 0, 1 ]
A_r = Array_of_size( A )
for i = 0 to Arraysize - 1
A_r[ i ] = A[ A[i] ]
结果 A_r = [1, 0, 3, 2]
O(n)
片段等价。 - m.raynal