思路
- 模拟,用队列模拟
- 递归, 考虑数组实现循环队列, 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;
}
} 
京公网安备 11010502036488号