// 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的模拟算法也给过,我时间紧迫就先写了一个模拟算法的了。
这个其实就是一个循环次数的问题,还有寻找面向答案的编程、还有数学算法可以使用。