这是可能的,那些称其为作业的人可能还没有尝试解决它。
我们将以下内容用作子程序:
Given an array a1 a2 ... an b1 b2 .. bn, convert in O(n) time and O(1) space to
b1 a1 b2 a2 ... bn an
可以在这里找到解决方案: http://arxiv.org/abs/0805.1598
我们使用以下方式。
对于前2^(k+1)-2个元素进行如上交错,从k=1开始重复进行k=2,3等,直至超出数组的末尾。
例如,在您的数组中,我们得到(通过括号标识的交错集合)
8, 4, 12, 2, 6, 10, 14, 1, 3, 5, 7, 9, 11, 13, 15
[ ][ ]
4, 8, 12, 2, 6, 10, 14, 1, 3, 5, 7, 9, 11, 13, 15 (k = 1, interleave 2)
[ ][ ]
2, 4, 6, 8, 10, 12, 14, 1, 3, 5, 7, 9, 11, 13, 15 (k = 2, interleave 6)
[ ][ ]
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 (k = 3, interleave 14)
因此,总时间为n + n/2 + n/4 + ... = O(n)。使用的空间为O(1)。
可以通过归纳证明这是有效的。