问题描述:有一个数组a1...anb1...bn,在o(n)的时间内,o(1)的空间内,将数组merge为a1b1...anbn
解决方法:
1. 直观地方法,计算每个元素的最终位置,并进行移动,问题,多个cycle
For instance consider the case when n=4
1 2 3 4 5 6 7 8
It should become
5 1 6 2 7 3 8 4
so 1 -> 5 -> 7 -> 8 -> 4 -> 2 -> 1 (-> means goes to)
and 3 -> 6 -> 3
因此这种方法不能全部解决
2. divide-conquer
将数组变成 a1..akb1...bkak+1..anbk+1...bn,然后分别解决子数组
3. 数论:如果n是3的幂,则方法1中描述的cycle只会出现一个
4.结合起来,选择一个k < n, 并且k是3的幂,将数组进行划分,对前面的数组按方法1进行解决,然后对后面的数组继续这个方法