[LeetCode] Minimum Number of Operations to Reinitialize a Permutation

1806. Minimum Number of Operations to Reinitialize a Permutation

You are given an even integer n​​​​​​. You initially have a permutation perm of size n​​ where perm[i] == i​ (0-indexed)​​​​.

In one operation, you will create a new array arr, and for each i:

  • If i % 2 == 0, then arr[i] = perm[i / 2].
  • If i % 2 == 1, then arr[i] = perm[n / 2 + (i - 1) / 2].

You will then assign arr​​​​ to perm.

Return the minimum non-zero number of operations you need to perform on perm to return the permutation to its initial value.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
int reinitializePermutation(int n) {
vector<int> cmp(n), arr(n), perm(n);
for(int i = 0; i < n; i++) {
cmp[i] = arr[i] = perm[i] = i;
}

int res = 0;
do {
for(int i = 0; i < n; i++) {
arr[i] = perm[i % 2 ? n / 2 + (i - 1) / 2 : i / 2];
}
perm = arr;
res++;
}while(arr != cmp);

return res;
}
};
Author: Song Hayoung
Link: https://songhayoung.github.io/2021/03/28/PS/LeetCode/minimum-number-of-operations-to-reinitialize-a-permutation/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.