在这里,我试图形成一个包含数字对的排列,每对m都由m个元素分隔。例如:
对于 [0,2],配对排列为 [2,0, 0,2],使得 m=2,因此数字 2 被 2 个元素分隔。
对于 [0,1] = 没有有效的排列
我仍然无法弄清楚排列的模式或算法,因为我需要找到最多 [0,1,2,3,4,5,6,7,8] 的排列。然而,通过手动执行此列表的有效排列是 [3,7,8,2,3,1,2,1,6,7,5,8,4,0,0,6,5,4] 。
在下面的代码中,我只能通过首先获取列表中最大的数字来重新排列列表中的数字。我想知道如何根据对的数量来分离对(例如,如果对是2,则分离数是2)
我怎样才能对数字列表进行分隔和模式?
package main
import "fmt"
func MagicPairs(list []int) {
//length := len(list) * 2
magicPair := []int{}
magicPair = append(list, list...)
for i := 0; i <len(magicPair); i++{
if len(magicPair) == 0 {
//do nothing
}else{
m := max(list)
for p, x := range magicPair{
if magicPair[len(magicPair)-1] == m {
magicPair = append([]int{m}, (magicPair)[:len(magicPair)-1]...)
fmt.Println(magicPair)
return
}
if x == m{
magicPair = append([]int{m}, append((magicPair)[:p], (magicPair)[p+1:]...)...)
}
previousPair := magicPair[x]
if x == previousPair{
}
}
}
}
fmt.Println("1", magicPair)
}
func max(list[] int) int{
max := list[0]
for _, value := range list{
if value > max {
max = value
}
}
return max
}
func main(){
list := [] int {0,1,2,3,4,5,6,7,8}
MagicPairs(list)
}
噜噜哒
相关分类