题解
通过画图找到规律,数组两端不参与变换,数组中间参与变化.数组中间的任意一个数回到原来的位置,其它数也回到原来的位置.以index=1为例.1->2->4-…x.,当x超过中间时 由 n/2+(i-1)/2=x得 i=2x+1-n (不明白看图)
代码
// 306 p1806-0108-还原排列的最少操作步数
public int reinitializePermutation(int n) {
if (n==2){
return 1;
}
int step=0,curr=1; // 初始值是1 看多少步再变回1
while (true){
if (curr<n/2){
curr*=2;
step++;
}else {
curr=2*curr+1-n;
}
if (curr==1){
return step;
}
}
}