给定一个形如3n的数组
[x1, x2, x3... xn, y1, y2, y3... yn, z1, z2, z3... zn]
将它转换为[x1, y1, z1, x2, y2, z2, ... xn, yn, zn]
这里的xn, yn, zn可以是任何整数。请参见下面的示例输入和输出。
两个约束条件:
- O(n)时间复杂度
- O(1)内存(原地)
以下是一个示例输入和输出。
输入:
[5, 8, 11, 3, 2, 17, 21, 1, 9]
3n = 9。所以n = 3。
这里
x1=5 x2=8 x3=11 y1=3 y2=2 y3=17 z1=21 z2=1 z3=9
输出:
[5, 3, 21, 8, 2, 1, 11, 17, 9]
一种可能的O(n log n)解法: 只考虑x和y。现在我可以交换所有的y到它的位置,这会使我交换掉x2、x4、x6的位置。然后我会交换x2、x4,这会使x3、x7的位置不正确。下一次迭代将是x8、x16。这会让我达到O(n log n),但不是O(n)。
x,y,z
改成a,b,c
,那么通过谷歌搜索会惊奇地容易)。 - Bernhard Barker