回复: Array Puzzle 一种解法,不严格符合题目要求,因为要用到n个bit指示位。
设这个Array为A, 取i为第一个和最终结果元素不同的位置,A[i]元素应该摆放到的位置为next[i],根据i的不同next[i]两种情况:
1. 1 <= i <= n: 此时A[i] = a[i],next[i] = 2*i - 1;
2. n < i <= 2*n: 此时A[i] = b[i-n],next[i] = 2*(i - n);
将A[next[i]]存储到临时变量中,根据上面的两步循环得到next[next[i]]的值以及赋予和它位置对应的正确元素,依次类推,可以得到一个摆放正确的元素的环路。
在上述过程中记录下已经摆放正确的位置,然后取i为第一个和最终结果元素不同的位置,继续查找其他环,最后可以得到正确的结果。 |