主题: Array Puzzle
查看单个帖子
  #2 (permalink)  
旧 2008-04-20
bankrock 的头像
bankrock bankrock 当前离线
高级会员
 
注册日期: 2003-12-11
帖子: 847
文章: 7
bankrock 正向着好的方向发展
默认 回复: 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为第一个和最终结果元素不同的位置,继续查找其他环,最后可以得到正确的结果。
回复时引用此帖