按照题目方法借助数组模拟过程
func lastRemaining(n int, m int) int {
// 初始化队列
q := make([]int, 0)
for i := 0; i < n; i++ {
q = append(q, i)
}
idx := 0
for len(q) != 1 {
// 选择删除的位置
idx = (idx+m-1)%len(q)
// 从队列中踢出去
q = append(q[:idx], q[idx+1:]...)
}
return q[0]
}
找规律反向推出数字每次删的位置 每次删除时,补上 m 个位置,再模上当时的数组长度大小 i (当前 index + m) % 上一轮剩余数字的个数
func lastRemaining(n int, m int) int {
ans := 0
for i := 2; i <= n; i++ {
ans = (ans + m)%i
}
return ans
}