LeetCode 1806.还原排列的最少操作步数

LeetCode 1806.还原排列的最少操作步数

从任意非头尾位置开始模拟一个最长的循环即可,每个数字最终都会按照题目中的意思处于一个循环当中。

    int reinitializePermutation(int n) {
        int x=n/2,ans=1;//任意位置找一个完整循环长度
        while(x!=1){
            if (x % 2==0) x=x/2;
            else x=n/2+(x-1)/2;
            ans++;
        }
        return ans;
    }