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