Open yankewei opened 3 years ago
func reinitializePermutation(n int) int {
var ret int
perm := make([]int, n)
origin := make([]int, n)
for i := 0; i < n; i++ {
perm[i] = i
origin[i] = i
}
for {
arr := make([]int, n)
for i, _ := range perm {
if i % 2 == 0 {
arr[i] = perm[i/2]
} else {
arr[i] = perm[n/2 + (i-1)/2]
}
}
perm = arr
ret++
if isEqual(origin, perm) {
return ret
}
}
}
func isEqual(f,s []int) bool {
for i, v := range s {
if v != f[i] {
return false
}
}
return true
}
给你一个偶数
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
回到排列初始值,至少需要执行多少步操作?返回最小的 非零 操作步数。示例 1:
示例 2:
示例 3:
提示: