题目描述
题目抽象:给定一个由[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();
}
}


京公网安备 11010502036488号