LEETCODE | PYTHON | 1806 | 还原排列的最少操作步数
1. 题目
给你一个偶数 n ,已知存在一个长度为 n 的排列 perm ,其中 perm[i] == i(下标 从 0 开始 计数)。
一步操作中,你将创建一个新数组 arr ,对于每个 i :
如果 i % 2 == 0 ,那么 arr[i] = perm[i / 2]
如果 i % 2 == 1 ,那么 arr[i] = perm[n / 2 + (i - 1) / 2]
然后将 arr 赋值给 perm 。
要想使 perm 回到排列初始值,至少需要执行多少步操作?返回最小的 非零 操作步数。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-number-of-operations-to-reinitialize-a-permutation
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 代码
class Solution:
def reinitializePermutation(self, n: int) -> int:
#初始化
index = 1
#计算第一代的位置1
a = n//2
#当a重新回到1时则整个数组回到原始状态
while a!=1:
if a%2 == 0:
a = a//2
else:
a = n//2+(a-1)//2
#计数器+1
index = index + 1
return index