思路

  • 模拟,用队列模拟
  • 递归, 考虑数组实现循环队列, f(n, m) = (m % n + x) % n = (m + x) % n

代码

import java.util.*;
public class Solution {
    public int LastRemaining_Solution(int n, int m) {
        Queue<Integer> queue=new LinkedList<>();
        for(int i=0;i<n;i++){
            queue.add(i);
        }
        while(queue.size()>1){
            int cnt=0;
            while(cnt<m-1 && queue.size()>1){
                queue.add(queue.poll());
                cnt++;
            }
            if(cnt==m-1 &&queue.size()>1){
                queue.poll();
            }
        }
        return queue.size()==1?queue.poll():-1;
    }
}