普通队列:
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 }