Daily LeetCode – day0164 1806. Minimum Number of Operations to Reinitialize a Permutation

// 1806. Minimum Number of Operations to Reinitialize a Permutation
class Solution {
    public int reinitializePermutation(int n) {
        int[] perm = new int[n];
        for (int i = 0; i < n; ++i) {
            perm[i] = i;
        }
        int ans = 0;
        while (true) {
            ++ans;
            int[] arr = new int[n];
            for (int i = 0; i < n; ++i) {
                if ((i & 1) == 0) {
                    arr[i] = perm[i >> 1];
                } else {
                    arr[i] = perm[(n >> 1) + (i - 1 >> 1)];
                }
            }
            if (isReinitialized(n, arr)) {
                break;
            }
            perm = arr;
        }
        return ans;
    }

    private boolean isReinitialized(int n, int[] arr) {
        for (int i = 0; i < n; ++i) {
            if (arr[i] != i) {
                return false;
            }
        }
        return true;
    }
}
学习笔记:
这道题是一道中等题,如果是数学算法,我觉得算是困难题了可以。
主要这道题用n^2的模拟算法也给过,我时间紧迫就先写了一个模拟算法的了。
这个其实就是一个循环次数的问题,还有寻找面向答案的编程、还有数学算法可以使用。


关于樊轶群

一个善良的理想主义者。
此条目发表在每日LeetCode分类目录。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注