队列解决约瑟夫环

it2024-03-10  69

普通队列:

func Ring(n, m int) int { if n == 0 { return -1 } if n == 1 { return 0 } queue := make([]int,n) for i := 0; i < n; i++ { queue[i] = i } count := 1 for len(queue) > 1 { if count == m { count = 1 queue = queue[1:] } else { count++ queue = append(queue, queue[0]) queue = queue[1:] } } return queue[0] }

循环队列:

func Ring2(n,m int) int { queue := make([]int,n) for i := 0; i < n; i++ { queue[i] = i } var front,rear = 0,n for { if rear - front == 0 { break } for i := 0; i < m-1;i++ { front = (front+1) % n rear = (rear+1) % n queue[rear] = queue[front] } front = (front+1) % n } return queue[front] - 1 }

 

最新回复(0)