题目描述
题目抽象:给定一个由[0...n-1]构成的数组,第一次从0开始数m个数,然后删除,以后每次都从删除的数下一个位置开始数m个数,然后删除,直到剩余一个数字,找出那个数字。
比如:arr = [0 1 2 3 4], m = 3
第一次:删除2 ,变成 arr = [0 1 3 4]
第二次,删除0,变成 arr = [1 3 4]
第三次,删除4,变成 arr = [1 3]
第四次,删除1,变成 arr = [3]
解题方法
借助队列一般涉及到这种循环移位,都可以借助队列来实现。移除队首可加入队尾
import java.util.LinkedList; import java.util.Queue; public class Solution { public int LastRemaining_Solution(int n, int m) { if (n == 0) { return -1; } Queue<Integer> queue = new LinkedList<>(); for (int i = 0; i < n; i++) { queue.add(i); } while (queue.size() > 1) { for (int i = 0; i < m - 1; i++) { queue.add(queue.poll()); } queue.remove(); } return queue.remove(); } }